Ich habe eine sehr einfache Sicht haben wie folgtVergleich querysets in django Testfall
def simple_view(request):
documents = request.user.document_set.all()
return render(request, 'simple.html', {'documents': documents})
Um die obige Ansicht in meinem Testfall zu testen Ich habe die folgende Methode, die Fehler aus.
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
# ...
Der Fehler, den ich bekomme, ist AssertionError: False is not true
. Ich habe versucht, beide Abfrage-Sets zu drucken und beide sind absolut identisch. Warum würde es False
zurückgeben, wenn beide Objekte identisch sind? Irgendwelche Ideen ?
Zeit, dies zu überwinden, ich bin ein gemeiner Hack zu prüfen Längen wie folgt verwendet:
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
yup, gerade die Lösung gefunden. Vielen Dank. – Amyth
Oder etwas prägnanter self.assertEqual (list (ds1), list (ds2)) – igniteflow