2015-10-01 4 views
3

В моих тестах я использую Django DummyCache, однако есть несколько тестов, которые ретранслируют на реальном кэшировании, поэтому использование поддельного кэширования здесь не очень хорошо.Переопределить настройки кеша Django в тестах

Есть ли чистый способ переопределить общий Django settings для определенного модуля или области? Предпочтительно использовать Python decorator.

Я пользуюсь Django версии 1.8.4.

ответ

5

Да, можно переопределить настройку. Из Django documentation: Testing:

Для целей тестирования часто бывает полезно изменить настройки временно и вернуться к исходному значению после выполнения коды тестирования. Для этого случая использования Django предоставляет стандартный контекст Python менеджер ... settings(), который может быть использован, как это:

from django.test import TestCase 

class LoginTestCase(TestCase): 
    def test_login(self): 
     # Override the LOGIN_URL setting 
     with self.settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}): 
      response = self.client.get(...) 

Я тестировал выше подход с несколькими других настройками сам, но не с конкретным кэшем но это общая идея.

EDIT (кредиты @Alasdair):

пересортицы конкретной настройки переопределения следующее предупреждение можно найти в документации:

Изменяя настройки CACHES можно, но немного сложнее, если вы используют внутренние элементы, которые используют кеширование, например django.contrib.sessions. Например, вам придется повторно инициализировать сессионный сервер в тесте, который использует кешированные сеансы и переопределяет CACHES.

+2

Переопределение 'параметр CACHES' должен работать большую часть времени, но вы можете столкнуться с проблемами, иногда. В документах есть [предупреждение] (https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.modify_settings). – Alasdair

+0

Правильно, спасибо @Alasdair за эту информацию. – Wtower