我遇到了以下问题。我有一个看起来有点像这样的模型:
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/