我在 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
在测试套件中设置了较早的对象,但在每次测试后不会重新实例化对象(出于明显的原因),因此@override_settings
实际上并没有做任何事情。
这是一个错误还是按预期工作?除了通过在to中/test/media
设置MEDIA_URL
常量来强制使用所有单元测试之外,还有什么优雅的解决方案建议吗?settings/test.py
/test/media