2012-03-12 18 views
11

Sto testando una vista in Django che dovrebbe rimuovere tutti i tag da un oggetto. Per questo io uso questa asserzione:Come posso testare un queryset vuoto in Django?

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

Che funziona bene, come ottengo una lista vuota in cambio. Ho avvolto il queryset Django in un elenco per evitare questo:

AssertionError: [] != [] 

dove un Django vuoto queryset viene confrontato con un elenco vuoto.

Ma poiché questo non è qualcosa che mi piace molto, mi sono chiesto se c'è un modo migliore per fare quel test.

risposta

23

Basta usare 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) 

Si potrebbe anche usare len() se si desidera applicare il set di query in corso di valutazione come una lista!

In alternativa anche assertQuerysetEqual è utile, è possibile eseguire un confronto con un'istanza 0f django.db.models.query.EmptyQuerySet! Ma usare count() dovrebbe essere il modo più veloce nella maggior parte dei casi!

Problemi correlati