Итак, у меня есть проект django с несколькими приложениями.
Каждое приложение использует свою собственную базу данных, и они совместно используют общую базу данных, содержащую таблицы django (например, auth, session).
Для этого у меня есть несколько маршрутизаторов базы данных, поэтому мои настройки выглядят так:
DATABASES = {
'default': {
..
},
'app1_db': {
..
},
'app2_db':{
..
}
}
DATABASE_ROUTERS = ["site.db_router.App1Router", "site.db_router.App2Router"]
# no router for default database
Каждое приложение также прошло свои модульные тесты. Чтобы устранить мою проблему, я извлек одно из приложений. Он содержит тестовый модуль с четырьмя тестовыми файлами. Тестовый файл номер один выглядит так:
class ExcelTestCase(TransactionTestCase):
databases = ["app1_db"]
# some tests
Контрольный пример 1
python manage.py test app1.tests.testfile1
вызывает эту ошибку django.core.exceptions.ImproperlyConfigured: Circular dependency in TEST[DEPENDENCIES]
Контрольный пример 2
Я комментирую раздел базы данных: создается только тестовая база данных по умолчанию (не прикладная), и возникает эта ошибка:
AssertionError: Database queries to 'app1_db' are not allowed in this test. Add 'app1_db' to app1.tests.testfile1.ExcelTestCase.databases to ensure proper test isolation and silence this fai
lure.
Контрольный пример 3
Я раскомментирую настройку databases
и запускаю python manage.py test app1.tests
, поэтому каждый тест запускается.
Три тестовых файла из четырех TransactionTestCase
и, следовательно, имеют настройки databases
.
Мне нужно прокомментировать, по крайней мере, первую или третью (вторая не TransactionTestCase) базу данных тестового файла, или я получаю ошибку зависимости Circulary, и таким образом я получил AssertionError
, потому что не могу использовать базу данных приложения.
Я использую Django 2.2 и некоторое время боролся за эту проблему, любая помощь будет оценена!