所以我有一个包含多个应用程序的django项目。
每个应用程序使用其自己的数据库,并且它们共享一个包含django表(例如auth,sessions)的通用数据库。
为此,我有几个数据库路由器,所以我的设置如下:
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
python manage.py test app1.tests.testfile1
引发此错误django.core.exceptions.ImproperlyConfigured: Circular dependency in TEST[DEPENDENCIES]
我评论数据库部分:仅创建默认的测试数据库(而不是应用程序一个),并引发此错误:
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.
我取消注释databases
设置并运行python manage.py test app1.tests
,以便运行每个测试。
四个测试文件中有三个是TransactionTestCase
,因此具有databases
设置。
我需要至少注释第一个或第三个(第二个不是TransactionTestCase)测试文件数据库,否则会出现循环依赖错误,由于没有使用应用程序数据库,我得到了AssertionError
我正在使用Django 2.2,并且在此问题上苦苦挣扎了一段时间,我们将不胜感激!
答案 0 :(得分:1)
也许设置您的“ DEPENDECIES”。
controlling creation order for test databases
检查它们是否收到依赖项列表,而没有依赖项的数据库是否收到EMPTY列表。
基本上,您必须添加以下内容:
'default': {
..
'TEST': {
'DEPENDENCIES': ['app1_db'],
},
},
'app1_db': {
# ... db settings
'TEST': {
'DEPENDENCIES': [],
},
}