Я использую библиотеку 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 () был вызван для этого.
Есть ли лучший способ протестировать то, что я пытаюсь получить? Я пытаюсь убедиться, что вызывается правильный запрос.