Патч django.conf настройки не изменяют значение
Я имею VOUCHERED_PEOPLE
в base.py
И мне нужно проверить это dummy
Я прочитал это, чтобы получить settings.VOUCHERED_PEOPLE
быть исправленным, но это не работает в Django2
utils.py
from django.conf import settings
def get_voucher_people(mobile_phone: str) -> typing.Dict[str, typing.Union[str, int]]:
"""Read name from base.py"""
for record in settings.VOUCHERED_PEOPLE:
if record['mobile_phone'] == mobile_phone:
return record
return None
base.py
VOUCHERED_PEOPLE = [{...}, {...}]
tests.py
with patch('poinkbackend.apps.vouchers.utils.settings', VOUCHERED_PEOPLE=dummy):
from pprint import pprint
import ipdb;
ipdb.set_trace()
give_voucher(sarit.userprofile, True)
Attempt1:
with patch.object(settings, 'VOUCHERED_PEOPLE') as mock_settings:
mock_settings.return_value = dummy
Это не работает. settings.VOUCHERED_PEOPLE
это функция. Я должен выполнить его, чтобы получить settings.VOUCHERED_PEOPLE()
Проблема:
патч не работает. Это не изменить значение, чтобы быть моим dummy
Вопрос:
Где я не прав?
1 ответ
Решение
Есть специальный менеджер контекста для изменения настроек в тестах:
with self.settings(VOUCHERED_PEOPLE=dummy):
...
С pytest-django вы можете использовать settings
как приспособление и изменить его напрямую; это будет отменено в конце каждого теста.
def test_vouchered_people(settings):
settings.VOUCHERED_PEOPLE=dummy
...