Ответ 1
Просто используйте exists
self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists())
Я тестирую представление в Django, которое должно удалить все теги из объекта. Для этого я использую это утверждение:
self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[])
Это хорошо работает, так как я получаю пустой список. Я обернул набор запросов Django в списке, чтобы избежать этого:
AssertionError: [] != []
где пустой набор запросов Django сравнивается с пустым списком.
Но поскольку это не то, что мне очень нравится, я задавался вопросом, есть ли лучший способ сделать этот тест.
Просто используйте exists
self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists())
self.assertEqual(Tag.objects.get_for_object(Animal.objects.get(pk=1).count(), 0)
Вы также можете использовать len()
, если вы хотите, чтобы запрос был оценен как список!
В качестве альтернативы также полезно assertQuerysetEqual
, вы можете сделать сравнение с экземпляром 0f django.db.models.query.EmptyQuerySet
! Но использование count()
должно быть самым быстрым способом в большинстве случаев!