tôi có một cái nhìn rất đơn giản như sauqueryset so sánh trong django testcase
def simple_view(request):
documents = request.user.document_set.all()
return render(request, 'simple.html', {'documents': documents})
Để kiểm tra xem trên trong trường hợp thử nghiệm của tôi tôi có phương pháp sau đây mà lỗi ra.
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ỗi tôi nhận được là AssertionError: False is not true
. Tôi đã thử in cả bộ truy vấn và cả hai đều hoàn toàn giống nhau. Tại sao nó trả lại False
khi cả hai đối tượng giống hệt nhau? Bất kỳ ý tưởng?
Hiện nay để khắc phục điều này, tôi đang sử dụng một hack khó chịu có độ dài kiểm tra như sau:
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, chỉ tìm thấy giải pháp. Cảm ơn. – Amyth
Hoặc self.assertEqual ngắn gọn (danh sách (ds1), danh sách (ds2)) – igniteflow