我在 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