2012-03-12 10 views
11

Testuję widok w Django, który powinien usunąć wszystkie znaczniki z obiektu. Do tego używam tego stwierdzenia:Jak mogę przetestować pusty zestaw zapytań w Django?

self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[]) 

To działa dobrze, ponieważ w zamian otrzymuję pustą listę. I owinął Django queryset w liście, aby uniknąć w ten sposób:

AssertionError: [] != [] 

gdzie pusty Django queryset jest porównywana z pustą listę.

Ale ponieważ nie jest to coś, co bardzo lubię, zastanawiałem się, czy jest lepszy sposób na wykonanie tego testu.

Odpowiedz

23

Wystarczy użyć exists

self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists()) 
7
self.assertEqual(Tag.objects.get_for_object(Animal.objects.get(pk=1).count(), 0) 

Można również użyć len() jeśli chcesz wymusić queryset jest oceniane jako liście!

Alternatywnie można również użyć porównania z instancją 0f django.db.models.query.EmptyQuerySet! Ale w większości przypadków używanie metody count() powinno być najszybszą metodą!

Powiązane problemy