【发布时间】:2013-11-14 14:18:30
【问题描述】:
我在为 Django 编写测试时遇到问题(刚开始使用这个框架)。在浏览器中一切正常,但是当我使用 TestCase 时,请求方法似乎不是 POST。代码如下:
views.py:
def save(request, quiz_id):
try:
quiz = get_object_or_404(Quiz, pk=quiz_id)
qset = Question.objects.filter(quiz=quiz_id)
except IndexError:
raise Http404
questions = []
if request.method == 'POST':
f = QuizForm(request.POST, qset)
if f.is_valid():
do_stuff()
return render(request, 'quiz/results.html', {'questions': questions})
return HttpResponseBadRequest()
tests.py:
def test_results(self):
post_data = {
'ans10': 43,
'ans6' : 28,
'ans7' : 33,
'ans8' : 36,
'ans9' : 38,
}
resp = self.client.post('/1/save/', post_data)
self.assertEqual(resp.status_code, 200)
并运行测试:
self.assertEqual(resp.status_code, 200)
AssertionError: 400 != 200
表单是有效的,传递的数据是正确的,在浏览器中,就像我说的,一切正常。我对这个测试有疑问,似乎请求方法不是 POST。感谢您的帮助。
【问题讨论】:
-
请修正您的代码缩进。
-
在文件中一切正常;)但我会修复。
-
网址格式是什么?
-
顺便说一句,
get_object_or_404可能会提高Quiz.DoesNotExist,但它永远不会提高IndexError。 -
在
fnot 有效的情况下,您应该返回或至少记录错误。您可能想向我们展示QuizForm的代码。
标签: python django unit-testing testing post