Python 在每次测试之前初始化媒体根目录和Django存储

Python 在每次测试之前初始化媒体根目录和Django存储,python,django,django-tests,Python,Django,Django Tests,如中所述,我试图隔离Django测试中所做的文件系统更改 我基本上是在运行测试之前更改设置.MEDIA\u ROOT。不幸的是,Django存储类似乎不受其影响,因此文件保存在原始位置,即使MEDIA\u ROOT指向另一个临时目录 如何重新初始化Django存储系统以反映新的媒体根目录 更新:问题是设置文件已预加载到django.conf.settings对象中,对settings.MEDIA\u ROOT的任何更改都不会反映在预加载的实例中。我仍然不知道如何克服这个问题。结果我只需要更改两个

如中所述,我试图隔离Django测试中所做的文件系统更改

我基本上是在运行测试之前更改
设置.MEDIA\u ROOT
。不幸的是,Django存储类似乎不受其影响,因此文件保存在原始位置,即使
MEDIA\u ROOT
指向另一个临时目录

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


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

结果我只需要更改两个设置:

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

django_settings.MEDIA_ROOT = settings.MEDIA_ROOT = '....'
这就解决了问题


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

您可能希望在测试中使用Django。这正是它的设计目的

直接从文档中,注意带有自我设置的

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/')

你在哪里更改设置?媒体根目录?在你的测试中,在你的app.settings中?在我的测试类和TestRunner类中。每个文件是否有不同的媒体根目录?不。有些测试在同一媒体根目录下创建多个文件。这似乎是个好主意!我将在setUp()方法中添加它,并在tearDown()中进行清理@zmbq小心,这是一个错误,因此它不能与
设置
拆卸
一起使用。对
settings
的更改只有在您“在缩进块内”时才处于活动状态。我很确定我可以在设置中调用
self.settings(…)
,保存生成的上下文并在拆卸中关闭它。但是,由于我在原始问题中提到的问题,这还不够-我还需要从测试运行程序更改媒体根目录,以避免人们忘记调用安装程序时出现问题。