Django测试镜像数据库没有接收数据

时间:2013-09-20 13:35:57

标签: python django unit-testing testing

我正在尝试在我的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的目的是让对镜像的调用直接传递到默认值?

2 个答案:

答案 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)

我认为答案可能是here

  

配置测试环境后,将测试slave版本   无法创建。相反,与slave的连接将被重定向到   默认指向

由于奴隶在测试中确实不存在,因此尝试直接调用它是有道理的