Mam bardzo prosty pogląd następującoporównujące querysets w Django TESTCASE
def simple_view(request):
documents = request.user.document_set.all()
return render(request, 'simple.html', {'documents': documents})
Aby przetestować powyższy pogląd w moim przypadku testowego Mam następującą metodę, która się błędy.
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
# ...
Błąd, który otrzymałem, to AssertionError: False is not true
. Próbowałem wydrukować oba zapytania i oba są absolutnie identyczne. Dlaczego miałby powrócić False
, gdy oba obiekty są identyczne? Jakieś pomysły ?
Obecnie do przezwyciężenia tego, używam paskudny siekać długości sprawdzanie następująco:
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
tak, właśnie znalazłem rozwiązanie. Dzięki. – Amyth
Lub nieznacznie bardziej zwięźle self.assertEqual (lista (ds1), lista (ds2)) – igniteflow