我在Ubuntu 12.10上使用Django 1.4和Python 2.7。
我有一个包含多个应用程序和几十个单元测试的项目。我们最近使用@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
,但在每次测试后都没有重新实例化对象(原因很明显),所以{{1}实际上并没有做任何事情。
这是一个错误还是按预期工作?除了通过在@override_settings
到/test/media
中设置MEDIA_URL
常量来强制所有单元测试使用settings/test.py
之外,对优雅解决方案的任何建议除外吗?