gpt4 book ai didi

django - 具有多个应用程序和数据库的单元测试项目 - TEST [DEPENDENCIES] 中的循环依赖

转载 作者:行者123 更新时间:2023-12-01 08:13:51 25 4
gpt4 key购买 nike

所以我有一个包含多个应用程序的 django 项目。

每个应用程序都使用自己的数据库,并且它们共享一个包含 django 表(例如 auth、 session )的公共(public)数据库。

为此,我有几个数据库路由器,所以我的设置如下所示:

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)测试文件数据库,否则我得到循环依赖错误,这样做我得到 AssertionError因为我不能使用应用程序数据库。

我正在使用 Django 2.2,并且在这个问题上已经苦苦挣扎了一段时间,任何帮助将不胜感激!

最佳答案

也许设置你的“依赖”。

controlling creation order for test databases

检查它们是否收到依赖项列表,并且没有依赖项的数据库是否收到 EMPTY 列表。

基本上你必须添加类似的东西:

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

关于django - 具有多个应用程序和数据库的单元测试项目 - TEST [DEPENDENCIES] 中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56899418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com