我想在测试中以及测试检索的夹具中模拟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
模拟值未应用到灯具中,因为它们在开始测试之前就调用了,但是我只想在此测试中修补此灯具。
我不想创建用于测试的区别性夹具或织物。
答案 0 :(得分:0)
没有简单的方法可以解决它! 例如,您可以在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