Python Django测试镜像数据库未接收数据

Python Django测试镜像数据库未接收数据,python,django,unit-testing,testing,Python,Django,Unit Testing,Testing,我正在尝试对Django应用程序进行一些测试。我在整个应用程序中使用数据库镜像进行一些读取。当我尝试测试这些部分时,通过在数据库中创建模拟数据,然后尝试读取它,数据似乎不在镜像数据库中,尽管配置为test\u mirror 用于测试的数据库配置如下所示: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'maindb', 'HOST': 'lo

我正在尝试对Django应用程序进行一些测试。我在整个应用程序中使用数据库镜像进行一些读取。当我尝试测试这些部分时,通过在数据库中创建模拟数据,然后尝试读取它,数据似乎不在镜像数据库中,尽管配置为
test\u 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是一个模型)

这让我感到困惑,因为我认为
TEST\u MIRROR
的目的是直接调用镜像传递到默认值

如果您的设置包含多个数据库,并且您有一个测试 需要每个数据库,您可以使用 测试套件请求完全刷新

例如:

class TestMyViews(TestCase):
    multi_db = True

    def testIndexPageView(self):
        call_some_test_code()

该文档()并不精确,因为条件multi_db(间接在_databases_names中)不仅用于Django源中的刷新(拆卸),而且还用于‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘。(Django-1.5.1/Django/test/testcases.py:834)因此,这似乎是一个独立于主/从设置的基本条件。

我认为答案可能是:

当配置测试环境时,将显示从机的测试版本 无法创建。相反,与从属服务器的连接将重定向到 违约点


由于测试中不存在从机,因此尝试直接调用它会失败,这有点道理

恐怕我不认为这是本例中的答案。我们在生产中有一种类似于主/从关系的关系(在Heroku上有一个“跟随者”db),但在进行本地开发时,我们只是将两者的db配置指向一个db。当测试构建环境时,它会创建每个现有数据库的
\u test
副本,但由于它在配置中看到两个副本,因此会尝试创建相同的副本两次。这就是
TEST\u MIRROR
所解决的问题,因为它知道不为镜像创建db,但它似乎没有通知ORM将查询从镜像db传递到主机。我读到“相反,到从机的连接将重定向到默认点”,因为指向从机的任何东西都将传递到主机,因此,它似乎应该起作用。也许这只是一个我读错了的例子(在我看来,可以在文档中写得更清楚…)我不是官方消息来源,我明白你的意思,但我的理解是,这只发生在测试环境中
class TestMyViews(TestCase):
    multi_db = True

    def testIndexPageView(self):
        call_some_test_code()