Как элегантно заменить (исправить) параметр Django FileSystemStorage в ваши модульные тесты?

Я столкнулся со следующим У меня есть модель, которая выглядит примерно так:

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

Важным в этом примере является аргумент storage = конструктора FileField . Он заполняется значением из ] settings.py . Здесь есть следующий код:

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

Для производственного использования это отлично работает. Но в моих модульных тестах загружаемые мной файлы теперь записываются в / var / data , который содержит производственные данные. Я попытался заменить PACKAGE_STORE в packages / tests.py вот так

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

, но настоящая проблема в том, что перед загружается тестовый файл, пакеты приложение и его модели уже загружены, и поэтому параметр PACKAGE_STORAGE был решен, прежде чем я смогу изменить его в коде настройки теста.

Есть ли там элегантный способ переопределить этот конкретный параметр в контексте тестирования?

5
задан nvie 2 February 2011 в 12:54
поделиться