патч в настройках django.conf не изменяет значение - PullRequest
0 голосов
/ 04 мая 2018

У меня 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 Ответ

0 голосов
/ 04 мая 2018

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

with self.settings(VOUCHERED_PEOPLE=dummy):
    ...

С pytest-django вы можете использовать settings в качестве прибора и изменять его напрямую; оно будет отменено в конце каждого теста.

def test_vouchered_people(settings):
    settings.VOUCHERED_PEOPLE=dummy
    ...
...