gpt4 book ai didi

django - 如何在单元测试中优雅地交换(修补)Django FileSystemStorage 设置?

转载 作者:行者123 更新时间:2023-12-02 21:11:05 26 4
gpt4 key购买 nike

我遇到了以下问题。我有一个看起来有点像这样的模型:

class Package(models.Model):
name = models.CharField(max_length=64)
file = models.FileField(upload_to="subdir",
storage=settings.PACKAGE_STORAGE,
null=True)

此示例中的基本内容是 FileField 构造函数的 storage= 参数。它填充了来自 settings.py 的值。其中有以下代码:

from django.core.files.storage import FileSystemStorage
PACKAGE_STORAGE = FileSystemStorage(location="/var/data", base_url="/")

对于生产用途,这效果很好。但在我的单元测试中,我上传的内容现在写入 /var/data,其中包含生产数据。我尝试像这样交换 packages/tests.py 中的 PACKAGE_STORE

from django.conf import settings     # This is line 1
from tempfile import mkdtemp
settings.PACKAGE_STORAGE = FileSystemStorage(location=mkdtemp(), base_url="/")

# rest of the imports and testing code below

但真正的问题是,加载测试文件之前,packages 应用程序及其模型已经加载,因此,PACKAGE_STORAGE 设置已解决,然后我才能在测试设置代码中更改它。

是否有一种优雅的方法可以在测试上下文中覆盖此特定设置?

最佳答案

不知道这是否算优雅,但您可以使用不同的设置文件进行测试...

类似于:

# test_settings.py

from settings import *

PACKAGE_STORAGE = FileSystemStorage(location='/test/files', base_url="/")

然后使用测试设置运行测试,python manage.py test --settings=test_settings

关于django - 如何在单元测试中优雅地交换(修补)Django FileSystemStorage 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com