7

アプリケーションをテストしていますが、問題が発生していますが、その理由がわかりません。テスト用にフィクスチャをロードしていますが、フィクスチャには相互に依存する外部キーがあります。それらは特定の順序でロードする必要があります。そうしないと機能しません。

私がロードしているフィクスチャは次のとおりです。

["test_company_data", "test_rate_index", 'test_rate_description']

会社のデータは最初のものです。test_rate_indexには会社への外部キーがあり、test_rate_descriptionにはtest_rate_indexで宣言されたモデルへの外部キーがあります。(余談ですが、テストごとに異なるフィクスチャが必要です。そのため、すべてを1つにまとめるだけではありません)

テストのロードにdjangoの標準手順を使用すると、テストが適切な順序でロードされません。

クラスTestPackages(test.TestCase):
    フィクスチャ=["test_company_data"、 "test_rate_index"、 "test_rate_description"、]

メッセージが届きます

DoesNotExist:RateDescription一致クエリが存在しません。

しかし、フィクスチャの順序を逆にすると(意味がありません)、次のように機能します。

フィクスチャ=["test_rate_description"、 "test_company_data"、 "test_rate_index"、]

Djangoのドキュメントには、フィクスチャは宣言された順序でロードされると記載されていますが、そうではないようです。

回避策として、djangoを使用する代わりに

    call_command('loaddata'、* Fixtures、** {
                                            'verbosity':0、
                                            'commit':False、
                                            'データベース':'デフォルト'
                                         })

setUpメソッドで、フィクスチャを一度に1つずつロードする別の関数を使用しています。

def load_fixtures(fixtures):
    フィクスチャ内のフィクスチャの場合:
        call_command('loaddata'、フィクスチャ、** {
                                            'verbosity':0、
                                            'commit':False、
                                            'データベース':'デフォルト'
                                            })

標準的な方法を使用しようとしたときに、フィクスチャが正しい順序でロードされない原因となっている、間違っている、または理解していないことがありますか?

4

1 に答える 1

1

Djangoのドキュメントには、フィクスチャは宣言された順序でロードされると記載されていますが、そうではないようです。

これは確かに奇妙です。プロジェクトの1つ(Django 1.2.1、Python 2.6.2、Postgresql 8.3.11)をテストしたときに、フィクスチャが適切な順序でロードされています。

これがトラブルシューティングのために私がすることです。

DoesNotExist:RateDescription一致クエリが存在しません。

  1. フィクスチャをロードするとき、またはテストを実行するときにこのエラーが発生しますか?これを引き起こしているフィクスチャ/コードを見つけることができますか?必要に応じて冗長性を高めます。

  2. loaddataコマンドラインからコマンドを実行してみてください。それを3回呼び出し、適切な予想される順序で呼び出しごとに1つのフィクスチャの名前を渡します。そして、器具がロードされるかどうかを確認します。

  3. おそらくすでにこれを行っていると思いますが、1番目と2番目のフィクスチャにRateDescriptionデータが含まれていないことを確認できますか?

于 2010-08-26T16:44:17.567 に答える