在每次测试之前初始化MEDIA_ROOT和Django存储

时间:2014-02-23 13:45:34

标签: python django django-tests

正如this question中所解释的,我正在尝试隔离Django测试中完成的文件系统更改。

我在测试运行之前基本上改变了settings.MEDIA_ROOT。不幸的是,Django存储类似乎不受它的影响,因此即使MEDIA_ROOT指向另一个临时目录,文件也会保存在原始位置。

如何重新初始化Django Storage系统以反映新的媒体根?

更新:问题是设置文件已预先加载到django.conf.Settings对象中,对settings.MEDIA_ROOT的任何更改都不会反映在预加载的实例中。我仍然不知道如何克服这个问题。

2 个答案:

答案 0 :(得分:2)

您可能希望在测试中使用Django的built-in feature to override settings。这正是它的设计目标。

直接从文档中注意with self.settings

from django.test import TestCase

class LoginTestCase(TestCase):

    def test_login(self):

        # First check for the default behavior
        response = self.client.get('/sekrit/')
        self.assertRedirects(response, '/accounts/login/?next=/sekrit/')

        # Then override the LOGIN_URL setting
        with self.settings(LOGIN_URL='/other/login/'):
            response = self.client.get('/sekrit/')
            self.assertRedirects(response, '/other/login/?next=/sekrit/')

答案 1 :(得分:1)

原来我只需要更改两个设置:

from django.conf import settings as django_settings
from project import settings

django_settings.MEDIA_ROOT = settings.MEDIA_ROOT = '....'

这解决了这个问题。

也许另一个问题是我没有在整个系统中使用django.conf.settings,而是我自己导入的设置。我会在某些时候改变它。