1

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

4

0 回答 0