Инициализация MEDIA_ROOT и хранилища Django перед каждым тестом
Как объясняется в этом вопросе, я пытаюсь изолировать изменения файловой системы, сделанные в тестах Django.
Я в основном меняюсь settings.MEDIA_ROOT
до запуска испытаний. К сожалению, класс хранения Django кажется незатронутым им, поэтому файлы сохраняются в исходном месте, даже если MEDIA_ROOT
указывает на другой, временный каталог.
Как повторно инициализировать систему хранения Django, чтобы отразить новый корень носителя?
ОБНОВЛЕНИЕ: проблема в том, что файл настроек предварительно загружен в django.conf.Settings
объект и любые изменения settings.MEDIA_ROOT
не отображаются в предварительно загруженном экземпляре. Я до сих пор не знаю, как преодолеть эту проблему.
2 ответа
Возможно, вы захотите использовать встроенную функцию 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/')
Оказывается, мне просто нужно изменить обе настройки:
from django.conf import settings as django_settings
from project import settings
django_settings.MEDIA_ROOT = settings.MEDIA_ROOT = '....'
Это решает проблему.
Возможно, другая проблема заключается в том, что я не использую django.conf.settings
по всей системе, а точнее мои собственные импортированные настройки. Я изменю это в какой-то момент.