Ho una visione molto semplice come segueconfrontando querysets in django testCase
def simple_view(request):
documents = request.user.document_set.all()
return render(request, 'simple.html', {'documents': documents})
Per testare la vista sopra nel mio caso di test ho il seguente metodo che gli errori fuori.
Class SomeTestCase(TestCase):
# ...
def test_simple_view(self):
# ... some other checks
docset = self.resonse.context['documents']
self.assertTrue(self.user.document_set.all() == docset) # This line raises an error
# ...
L'errore che ottengo è AssertionError: False is not true
. Ho provato a stampare entrambi i set di query ed entrambi sono assolutamente identici. Perché dovrebbe restituire False
quando entrambi gli oggetti sono identici? Qualche idea ?
Attualmente per superare questo, sto usando una brutta hack di lunghezze di controllo come segue:
ds1, ds2 = self.response.context['documents'], self.user.document_set.all()
self.assertTrue(len([x for x in ds1 if x in ds2]) == len(ds1) == len(ds2)) # Makes sure each entry in ds1 exists in ds2
sì, ho appena trovato la soluzione. Grazie. – Amyth
O leggermente più sinteticamente self.assertEqual (lista (ds1), lista (ds2)) – igniteflow