Sto provando a testare le mie vedute di Django. Questo punto di vista passa un QuerySet al modello:Come posso testare le Query di Django?
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))
e test:
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())
EDIT Sto usando self.assertQuerysetEqual invece di self.assertListEqual. Purtroppo questo ancora non funziona, e il terminale visualizza questo: ['<Product: Product object>'] != [<Product: Product object>]
assertListEqual solleva: oggetto 'QuerySet' non ha un attributo 'differenza' assertEqual non funziona, anche se self.assertSetEqual(response.context['product_list'][0], merchant.products.all()[0])
fa passaggio.
Suppongo che ciò sia dovuto al fatto che i QuerySet sono oggetti diversi anche se contengono le stesse istanze del modello.
Come verificare che due set di query contengano gli stessi dati? Lo sto testando correttamente? Questo è il mio quarto giorno di apprendimento di Django, quindi mi piacerebbe conoscere le migliori pratiche se possibile. Grazie.
Impressionante, questo è utile, anche se ora il mio test non riesce a causa di questo: AssertionError: [ '< Prodotto: Oggetto prodotto> ']! = [] L'unica differenza che vedo è che esistono virgolette attorno al primo oggetto prodotto. Sono entrambi di classe QuerySet –
jz999
Aggiorna la tua domanda con il nuovo codice di test. :) – girasquid
Ho appena fatto, grazie – jz999