具有多个应用程序和数据库的单元测试项目 - TEST[DEPENDENCIES] 中的循环依赖
Unit tests project with multiple application and databases - Circular dependency in TEST[DEPENDENCIES]
所以我有一个包含多个应用程序的 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
所以每个测试都是 运行ned。
四个测试文件中的三个是 TransactionTestCase
,因此具有 databases
设置。
我需要至少评论第一个或第三个(第二个不是 TransactionTestCase)测试文件数据库,否则我会收到循环依赖错误,这样做我会收到 AssertionError
因为我无法使用应用程序数据库。
我正在使用 Django 2.2 并在这个问题上苦苦挣扎了一段时间,我们将不胜感激!
也许设置您的 'DEPENDECIES'。
controlling creation order for test databases
检查它们是否收到依赖项列表,没有依赖项的数据库是否收到 EMPTY 列表。
基本上你必须添加如下内容:
'default': {
..
'TEST': {
'DEPENDENCIES': ['app1_db'],
},
},
'app1_db': {
# ... db settings
'TEST': {
'DEPENDENCIES': [],
},
}
所以我有一个包含多个应用程序的 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
所以每个测试都是 运行ned。
四个测试文件中的三个是 TransactionTestCase
,因此具有 databases
设置。
我需要至少评论第一个或第三个(第二个不是 TransactionTestCase)测试文件数据库,否则我会收到循环依赖错误,这样做我会收到 AssertionError
因为我无法使用应用程序数据库。
我正在使用 Django 2.2 并在这个问题上苦苦挣扎了一段时间,我们将不胜感激!
也许设置您的 'DEPENDECIES'。
controlling creation order for test databases
检查它们是否收到依赖项列表,没有依赖项的数据库是否收到 EMPTY 列表。
基本上你必须添加如下内容:
'default': {
..
'TEST': {
'DEPENDENCIES': ['app1_db'],
},
},
'app1_db': {
# ... db settings
'TEST': {
'DEPENDENCIES': [],
},
}