Инициализация 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 по всей системе, а точнее мои собственные импортированные настройки. Я изменю это в какой-то момент.

Другие вопросы по тегам