Django で ModelForms を処理しているときに、メッセージの内容をテストしようとしています。次のビューがあります (Thing
必須フィールドを持つモデルがあると仮定しname
ます):
@login_required
def update(request, thing_id):
thing = Thing.objects.get(id=thing_id) # assume this works
if request.method == "POST":
form = ThingModelForm(request.POST, instance=thing)
if form.is_valid():
form.save()
messages.success(request, "Success!")
return redirect("/wherever")
else:
messages.error(request, "Oops!")
else:
form = ThingModelForm(instance=thing)
args = ("myapp/update.html", {"form": form})
kwargs = {"context_instance": RequestContext(request)}
return render_to_response(*args, **kwargs)
これで、2 つの単体テストができました。1 つ目は有効なデータをテストし、2 つ目は無効なデータをテストします。(クライアントのログインは の実行中に発生することに注意してくださいsetUp
):
def test_update_account(self):
url = reverse('update', args=[1]) # assume that's a valid id
resp = self.client.post(url, {"name": "foo"})
self.assertEqual(resp.status_code, 302)
m = resp.cookies.get('messages', '')
self.assertTrue("Success!" in m.output())
次に、無効なデータをテストします。
def test_update_account_failure(self):
url = reverse('update', args=[1]) # assume that's a valid id
resp = self.client.post(url, {"name": ""}) # name is required
self.assertEqual(resp.status_code, 200)
# This works:
self.assertTrue("Oops!" in resp.content)
# This fails:
m = resp.cookies.get('messages', '')
self.assertTrue("Oops!" in m.output())
Cookie を介してメッセージのコンテンツにアクセスすると、あるインスタンスでは機能するのに別のインスタンスでは失敗するのはなぜですか?