) нравится:

у быть в состоянии сделать условное соединение () на основе либо я запустил Django в режиме тестирования или нет.

в моем файле settings.py я использую метод mongoengine connect () для подключения к моей базе данных, но проблема в том, что я не хочу этого делать, если я запускаю тест manage.py

Есть ли способ проверить, импортируется ли settings.py из тестов или нет, может быть, какой-нибудь флаг.

что-то вроде, если не IN_TESTS: connect ()

Ответы на вопрос(4)

Решение Вопроса

на котором я основал свое решение:https://github.com/xintron/django-mongorunner/blob/master/mongorunner/testrunner.py

Это имеет преимущество предоставлениясвежая база данных для каждого из ваших юнит-тестов.

class MyTestRunner(DjangoTestSuiteRunner):

    mongodb_name = 'testsuite'

    def setup_databases(self, **kwargs):
        from mongoengine.connection import connect, disconnect
        disconnect()
        connect(self.mongodb_name)
        print 'Creating mongo test-database ' + self.mongodb_name
        return super(MyTestRunner, self).setup_databases(**kwargs)

    def teardown_databases(self, old_config, **kwargs):
        from mongoengine.connection import get_connection, disconnect
        connection = get_connection()
        connection.drop_database(self.mongodb_name)
        print 'Dropping mongo test-database: ' + self.mongodb_name
        disconnect()
        super(MyTestRunner, self).teardown_databases(old_config, **kwargs)
 Rebs03 февр. 2014 г., 05:52
Будьте осторожны, используя отключение / подключение. У меня очень странное поведение, которое может привести к заражению ваших данных.github.com/MongoEngine/mongoengine/issues/566

но проще и проще иметь 2 файла настроек. Одна возможная конфигурация может быть:

У вас есть 2 файла настроек,lsettings.py это не соединяет иsettings.py это делает

from lsettings import *
mongodb.connect()

Итак, при локальном тестировании вы можете:

python manage.py test --settings=lsettings

И это не соединяет.

tl; dr: проще управлять различиями конфигурации, имея несколько файлов конфигурации, которые импортируют друг друга условно, а не пытаясь иметь условные параметры в одном файле настроек. YMMV.

что это абсолютно надежно, но я использую тот факт, что в тесте вы, вероятно, запустили его из командной строки с./manage.py test, так что 'test' является одним из аргументов командной строки. Так что это работает:

import sys
if 'test' not in sys.argv:
    mongodb.connect()
 Gattster17 апр. 2012 г., 01:57
Я опубликовал альтернативное решение, которое предоставляет свежую базу данных Монго для каждого модульного теста. Я использовал технику, которую вы перечислили в других случаях, но этот случай, кажется, лучше всего решить в тестовом раннере.

register_connection, а затем смоделируйте соединения на тесте.

В файле, который я определяю Mongo Documents, у меня есть это:

import mongoengine
from django.conf import settings

mongoengine.register_connection(
    'default', settings.MONGOENGINE_DB, **settings.MONGOENGINE_CONNECTION)

Затем в тестах я используюмакет библиотеки изменить поведение соединений (было бы также возможно издеваться над одной из функций наconnection субмодуль какget_db) нравится:

connections = patch.dict(
    mongoengine.connection._connections, {'default': None})

dbs = patch.dict(
    mongoengine.connection._dbs, {'default': {
        'your_collection': None,
        'another_collection': None,
        }})

dbs.start()
connections.start()

insert = patch.object(mongoengine.queryset.QuerySet, 'insert')
insert_mock = insert.start()

...

insert_mock.assert_called_once(...)

Ваш ответ на вопрос