Проект модульных тестов с несколькими приложениями и базами данных - круговая зависимость в TEST [ЗАВИСИМОСТЬ] - PullRequest
0 голосов
/ 05 июля 2019

Итак, у меня есть проект 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 и некоторое время боролся за эту проблему, любая помощь будет оценена!

1 Ответ

1 голос
/ 06 июля 2019

Может быть, установить ваши «ЗАВИСИМОСТИ».

управление порядком создания тестовых баз данных

Убедитесь, что они получают список зависимостей, а базы данных без зависимостей получают ПУСТОЙlist.

В основном вы должны добавить что-то вроде:

'default': {
 ..
    'TEST': {
        'DEPENDENCIES': ['app1_db'],
    },
},
'app1_db': {
# ... db settings
    'TEST': {
        'DEPENDENCIES': [],
    },
}
...