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()
/media
MEDIA_URL
MEDIA_URL
ファイル内の を変更することはできsettings/test.py
ますが、それにはすべてのテストを使用する必要があります/test/media
(とにかく良い考えかもしれません)。
明らかに問題は Djangoにあります。テスト スイートcore.files.storage.FileSystemStorage.__init__()
の初期値を設定しbase_url
ますが、(明らかな理由で) 各テストの後にオブジェクトを再インスタンス化しないため、@override_settings
実際には何もしません。
これはバグですか、それとも意図したとおりに機能していますか? to に定数を/test/media
設定して、すべての単体テストを強制的に使用する以外のエレガントなソリューションへの提案はありますか?MEDIA_URL
settings/test.py
/test/media