Дразнить некоторые приборы внутри теста - PullRequest
0 голосов
/ 06 мая 2019

Я хочу смоделировать timezone.now в тесте И в приборах, которые тест извлекает.

def time_to_test():
    return datetime(year=2019, month=4, day=30, hour=6, minute=2, second=3)

Я пытаюсь:

with patch('django.utils.timezone.now', side_effect=time_to_test):
    @pytest.mark.django_db
    def test_only_one(user_helpers, user):
        print(django.utils.timezone.now()) # Here is mocked timezone
        print(user_helpers.created_time) # Here is real time
        assert user_helpers.count == 4

и

@patch('django.utils.timezone.now', side_effect=time_to_test):
@pytest.mark.django_db
def test_only_one(user_helpers, user):
    print(django.utils.timezone.now()) # Here is mocked timezone
    print(user_helpers.created_time) # Here is real time
    assert user_helpers.count == 4

Смежное значение не применяется в приборах, потому что они вызывались перед началом теста, но я бы хотел исправить эти приборы только в этом тесте.

Я не хочу создавать отличительный прибор или ткань для теста.

1 Ответ

0 голосов
/ 16 мая 2019

Нет простого способа решить это!Например, как это работает, вы можете увидеть на freezegun и pytest-freezegun Freezegun использует sqlite db для сохранения текущего контекста и восстановления его после выполнения декоратора или менеджера контекста.

Простой ответ:

@pytest.mark.freeze_time('2019-04-18')
@pytest.mark.django_db
def test_only_one(user_helpers, user):
    print(django.utils.timezone.now()) # Here is mocked timezone
    print(user_helpers.created_time) # Here is real time
    assert user_helpers.count == 4
...