장고보기를 테스트하려고합니다. 이 뷰는 템플릿에 검색어 세트를 전달합니다Django QuerySet이 같은지 테스트하는 방법은 무엇입니까?
def merchant_home(request, slug):
merchant = Merchant.objects.get(slug=slug)
product_list = merchant.products.all()
return render_to_response('merchant_home.html',
{'merchant': merchant,
'product_list': product_list},
context_instance=RequestContext(request))
및 테스트 :
def test(self):
"Merchant home view should send merchant and merchant products to the template"
merchant = Merchant.objects.create(name='test merchant')
product = Product.objects.create(name='test product', price=100.00)
merchant.products.add(product)
test_client = Client()
response = test_client.get('/' + merchant.slug)
# self.assertListEqual(response.context['product_list'], merchant.products.all())
self.assertQuerysetEqual(response.context['product_list'], merchant.products.all())
편집 내가 대신 self.assertListEqual의 self.assertQuerysetEqual를 사용하고 합니다. 불행하게도이 여전히 작동하지 않고 터미널 표시이 : ['<Product: Product object>'] != [<Product: Product object>]
assertListEqual 제기 : '검색어 세트'객체는 assertEqual는 self.assertSetEqual(response.context['product_list'][0], merchant.products.all()[0])
통과 않지만, 하나가 작동하지 않는 어떤 속성 '차이' 이 없습니다.
동일한 모델 인스턴스가 포함되어 있어도 QuerySets가 다른 개체이기 때문입니다.
두 QuerySets에 동일한 데이터가 포함되어 있는지 테스트하려면 어떻게해야합니까? 나는이 모든 것을 정확하게 테스트하고 있는가? 가능하다면 모범 사례를 알고 싶습니다. 이것은 장고를 배운 제 4 일째입니다. 감사.
신난다,이, 도움이됩니다 : AssertionError를 : [ '< 제품 : Product object> ']! = [] 유일한 차이점은 첫 번째 제품 개체 주위에 따옴표가 있다는 것입니다. 둘 다 QuerySet입니다. –
jz999
새 테스트 코드로 질문을 업데이트하십시오. :) – girasquid
그냥, 감사합니다 – jz999