2

私のアプリはdjango-localeurlを使用しています。私の単体テストは django 1.5.5 では問題ありませんでしたが、django 1.6.2 に移行して以来、応答のステータス 301 のために多くのエラーが発生しています。

これは、ロケール接頭辞を考慮していない間違った URL が原因のようです。つまり、単体テストを呼び出す場合、 localeurl ではなくreverse通常の djangoが呼び出されます。reversereverse

patch_reverseが単体テストで呼び出されることを確認しました。私の呼び出しは、メインの urls.py の上部にあります。大丈夫そうです。

しかし、何らかの理由で、ジャンゴreverseは何かによって復元されます。

この問題は、単体テスト中にのみ発生するようです。アプリの実行時に URL が正しくローカライズされます。

問題は django-localeurl の次の問題に対応していると思います: https://bitbucket.org/carljm/django-localeurl/issue/22/test-problem

この問題の原因を知っている人はいますか (django 1.6 で単体テストのメカニズムが変更されましたが、それが理由ですか?)、それを修正する方法はありますか?


アップデート

次の設定を強制すると問題は発生しません

TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
4

1 に答える 1

1

原因は、DiscoverRunner(django 1.6 でテストを実行する新しい方法) が、実行するテストのリストを作成するために、事前にテスト モジュールをインポートしていることにあるようです。

結果として、テスト モジュールのインポートは、設定と URL のインポートの前に実行されます。次に、モジュールは、reverseパッチが適用される前にdjango をインポートします。urls.py

私の修正は、テスト モジュールの最初にパッチを適用することです。完璧な解決策ではないと思いますが、うまくいきます。

于 2014-02-24T08:35:45.237 に答える