我正在尝试在我的Django应用程序上设置一些测试。我已经为测试数据库使用了数据库镜像。当我尝试进行少量测试时,会出现来自'默认数据库的数据。在镜像测试数据库中不可用。
'default': { #'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'OPTIONS':{
'timeout': 180,
},
# 'TEST':{
# 'MIRROR': 'default',
#
# }
},
'replica': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'OPTIONS':{
'timeout': 180,
},
'TEST_MIRROR': 'default'
}
我的测试:
data_school = DataSchool.objects.all()
self.assertTrue(data_school.exists())
我很困惑,数据库管理员将test_mirrors配置为默认数据库的只读副本。理论上,默认数据库中的任何数据都应该可用于测试?如果我有任何配置错误,请告诉我们。谢谢
答案 0 :(得分:4)
这是Django中的已知错误: https://code.djangoproject.com/ticket/23718
该票证中描述的解决方法是您最好的选择。我遇到了同样的问题,并通过定义一个自定义的TestCase类并在我的所有测试中继承自定义测试用例来实现解决方法。我还选择使用setUpClass和tearDownClass而不是bug票证中描述的setUp和tearDown。要么应该工作。
from django.db import connections
class CustomTestCase(TestCase):
@classmethod
def setUpClass(cls):
super(CustomTestCase, cls).setUpClass()
connections['replica']._orig_cursor = connections['replica'].cursor
connections['replica'].cursor = connections['default'].cursor
@classmethod
def tearDownClass(cls):
connections['replica'].cursor = connections['replica']._orig_cursor
super(CustomTestCase, cls).tearDownClass()