Тестовые базы данных только для чтения Django

Я, должно быть, здесь упускаю очевидное. Я использую django 1.5.x и создаю юнит-тесты на основе класса djangos TestCase. У меня есть куча БД, определенных в настройках, как я тяну (только для чтения) из разных источников. При запуске test я хочу создать только тестовую версию моей базы данных по умолчанию, а остальное я хочу пометить как доступную только для чтения, а не пытаться воссоздать ее как test_db_name (пользователь не может (не может) иметь разрешения на создание этих дбс в любом случае).

Конечно, это возможно - как я говорю, я должен упустить очевидное?

Благодарен за любую помощь.

Mathew

2 ответа

Не очевидно, нет. В порядке документирования, вы можете установить имя базы данных для использования во время тестирования:

settings.py

DATABASES = {
  'default': {
    'ENGINE': 'django.contrib.gis.db.backends.spatialite',
    'NAME': 'db.sqlite3',
    'TEST_NAME': '/tmp/test.sqlite3',
  },
}

Если вы хотите затем не создавать (или перестраивать) тестовую базу данных, вам нужно будет продублировать имя базы данных в TEST_NAME и использовать новый python manage.py test--keepdb Команда, чтобы оставить базу данных нетронутой, вместо того, чтобы Django пытался удалить ее между запусками. По состоянию на июнь 2014 года вам необходимо перейти на версию Django для разработки, чтобы получить к ней доступ; в конечном итоге это будет в стабильной версии. Недостатком этого является, насколько я понимаю, это относится ко всем базам данных, а не только к вашим только для чтения.

У меня была такая же проблема, и мне удалось решить ее так:

settings.py

DATABASES = {
    'default': {...},
    'other': {...}
}

DATABASE_ROUTERS = ['routers.MyRouter']

...

TESTING = 'test' in sys.argv

if TESTING:
    DATABASE_ROUTERS = []
    DATABASES.pop('other')    

Если вы не используете жестко закодированную маршрутизацию БД, такую ​​как "using", а используете только "DATABASE_ROUTERS", то это решение должно быть достаточно для вас.

Конечно, если вы хотите на самом деле протестировать соединение с удаленной БД и хранящиеся там данные, то это не лучший способ.

Другие вопросы по тегам