1

Ubuntu 12.10でPython 2.7でDjango 1.4を使用しています。

いくつかのアプリと数十の単体テストを含むプロジェクトがあります。@override_settings最近、デコレータを使用して小さな問題に遭遇しました。

ここにいくつかのコードがあります:

@override_settings(MEDIA_URL='/test/media/')
    def test_get_content_dict(self):
        self.assertEqual(
                self.offer.get_content_dict(),
                { 'some stuff': some stuff }

テストがアプリ レベルで実行されると、すべてが成功します。

python manage.py test my_app --settings=proton.settings.test

しかし、プロジェクト レベルで実行すると失敗します。

python manage.py test --settings=proton.settings.test

some stuffを使用しているため失敗していますが、実際のを使用し/test/mediaているモデル メソッドです。offer.get_contect_dict()/mediaMEDIA_URL

MEDIA_URLファイル内の を変更することはできsettings/test.pyますが、それにはすべてのテストを使用する必要があります/test/media(とにかく良い考えかもしれません)。

明らかに問題は Djangoにあります。テスト スイートcore.files.storage.FileSystemStorage.__init__()の初期値を設定しbase_urlますが、(明らかな理由で) 各テストの後にオブジェクトを再インスタンス化しないため、@override_settings実際には何もしません。

これはバグですか、それとも意図したとおりに機能していますか? to に定数を/test/media設定して、すべての単体テストを強制的に使用する以外のエレガントなソリューションへの提案はありますか?MEDIA_URLsettings/test.py/test/media

4

0 に答える 0