私はDjangoビューをテストしようとしています。このビューには、テンプレートにクエリセットを渡します。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))
とテスト:
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.assertQuerysetEqual代わりのself.assertListEqualを使用しています。残念ながら、これはまだ動作しませんし、端末のディスプレイこの: ['<Product: Product object>'] != [<Product: Product object>]
assertListEqualが提起:「クエリセット」オブジェクトがself.assertSetEqual(response.context['product_list'][0], merchant.products.all()[0])
が通過んが assertEqualは、いずれかの動作しません何の属性の違い」を持っていません。
これは、同じモデルインスタンスが含まれていても、QuerySetsが異なるオブジェクトであると考えられます。
2つのクエリセットに同じデータが含まれていることをテストするにはどうすればよいですか?私はこれをすべて正しくテストしていますか?可能な場合、私はベストプラクティスを知りたいので、これはDjangoを学ぶ私の4日目です。ありがとう。
恐ろしいが、これが今の私のテストはこのために失敗したものの、有用である: てAssertionError:[ '<製品:製品オブジェクト> ']!= [] 最初の製品オブジェクトの周りに引用符があることがわかります。それらは両方ともクラスQuerySet –
jz999
です。あなたの質問を新しいテストコードで更新してください。 :) – girasquid
ちょうど、ありがとう – jz999