0

正如这个问题中所解释的,我试图隔离在 Django 测试中完成的文件系统更改。

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

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

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

4

2 回答 2

1

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

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

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

这解决了问题。

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

于 2014-02-23T14:10:12.613 回答
1

您可能希望使用 Django 的内置功能来覆盖测试中的设置。这正是它的设计目的。

直接从文档中,注意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/')
于 2014-02-23T14:11:49.563 回答