7

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ミラーへの呼び出しをデフォルトに直接渡すことがポイントだと思っていたので、これは私を混乱させますか?

4

2 に答える 2

5

セットアップに複数のデータベースが含まれていて、すべてのデータベースを必要とするテストがある場合は、テスト スイートでmulti_db属性を使用してフル フラッシュを要求できます。

例えば:

class TestMyViews(TestCase):
    multi_db = True        # for Django < 3.1 (deprecated since 2.2)
    databases = '__all__'  # for Django >= 2.2
    # databases = {'default', 'other'}  # or explicit databases


    def testIndexPageView(self):
        call_some_test_code()

条件 multi_db (_databases_names で間接的に) は、Django ソースのフラッシュ (tearDown) だけでなく、'_fixture_setup' にも使用されるため、そのドキュメント (マルチデータベース サポート テスト) は正確ではありません。(Django-1.5.1/django/test/testcases.py:834) したがって、マスター/スレーブの設定に依存しない基本的な条件のようです。

于 2013-09-28T12:53:44.260 に答える
1

答えはここにあると思います:

テスト環境が構成されている場合、スレーブのテスト バージョンは 作成されません。代わりに、スレーブへの接続がデフォルトのポイントにリダイレクトされます

スレーブはテストに実際には存在しないため、直接呼び出そうとすると失敗するのはちょっと理にかなっています

于 2013-10-03T16:07:41.290 に答える