我正在尝试测试我的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())
EDIT我正在使用self.assertQuerysetEqua
l而不是self.assertListEqual
。不幸的是,这仍然行不通,并且终端显示以下内容:['<Product: Product object>'] != [<Product: Product object>]
assertListEqual
引发:'QuerySet' object has no attribute 'difference'
和尽管assertEqual
通过了,但self.assertSetEqual(response.context['product_list'][0], merchant.products.all()[0])
也不起作用。
我认为这是因为QuerySet是不同的对象,即使它们包含相同的模型实例。
如何测试两个QuerySet包含相同的数据?我什至在正确测试?这是我学习Django的第4天,因此,如果可能的话,我想了解最佳做法。谢谢。
默认情况下,assertQuerysetEqual
在第一个参数上使用repr()
。这就是为什么查询集比较中的字符串有问题。
repr()
我发现使用qazxswpoi也解决了这个问题。