我正在尝试在我的Django应用程序上设置一些测试。我在整个应用程序中使用数据库镜像进行一些读取。当我尝试测试这些部分时,通过在数据库中创建模拟数据然后尝试读取它,看起来好像数据不在镜像数据库中,尽管被配置为TEST_MIRROR
。
用于测试的数据库配置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'maindb',
'HOST': 'localhost'
},
'mirror1': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'maindb',
'HOST': 'localhost',
'TEST_MIRROR': 'default'
}
}
然后在我的测试中我做了类似的事情(Foo是模特)
Foo.objects.create(name='bar')
self.assertTrue(Foo.objects.filter(name='bar').exists()) # passes
self.assertTrue(Foo.objects.using('mirror1').filter(name='bar').exists()) # fails
这让我感到困惑,因为我认为TEST_MIRROR
的目的是让对镜像的调用直接传递到默认值?
答案 0 :(得分:4)
如果您的设置包含多个数据库,并且您有一个测试 需要每个数据库,你可以使用 multi_db 属性 测试套件请求完全刷新。
例如:
class TestMyViews(TestCase):
multi_db = True
def testIndexPageView(self):
call_some_test_code()
该文档(multi-database support testing)并不准确,因为条件multi_db(间接在_databases_names中)不仅用于Django源中的flush(tearDown),还用于'_fixture_setup'。 (Django-1.5.1 / django / test / testcases.py:834)因此它似乎是一个独立于主/从设置的基本条件。
答案 1 :(得分:1)