Я использую библиотеку mock , написанную Майклом Фурдом, чтобы помочь с моим тестированием в приложении django.
Я хотел бы проверить, правильно ли я настраиваю свой запрос, но я не думаю, что мне действительно нужно попасть в базу данных, поэтому я пытаюсь смоделировать запрос.
Я могу просто отлично смоделировать первую часть запроса, но не получаю желаемых результатов, когда включаю дополнительные элементы.
Функция:
@staticmethod
def get_policies(policy_holder, current_user):
if current_user.agency:
return Policy.objects.filter(policy_holder=policy_holder, version__agency=current_user.agency).distinct()
else:
return Policy.objects.filter(policy_holder=policy_holder)
и мой тест: первое утверждение проходит, второе не проходит.
def should_get_policies_for_agent__user(self):
with mock.patch.object(policy_models.Policy, "objects") as query_mock:
user_mock = mock.Mock()
user_mock.agency = "1234"
policy_models.Policy.get_policies("policy_holder", user_mock)
self.assertEqual(query_mock.method_calls, [("filter", (), {
'policy_holder': "policy_holder",
'version__agency': user_mock.agency,
})])
self.assertTrue(query_mock.distinct.called)
Я почти уверен, что проблема в том, что начальный query_mock возвращает новый макет после вызова .filter (), но я не знаю, как захватить этот новый макет и убедиться, что .distinct () был вызван на нем.
Есть ли лучший способ проверить то, что я пытаюсь получить? Я пытаюсь убедиться, что вызывается правильный запрос.