Django测试客户端 - sendng POST数据返回400错误

时间:2013-11-14 14:18:31

标签: python django unit-testing testing post

我在为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。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

鉴于你的缩进缩进很难说,但是如果这是一个POST请求并且表单有效,那么你的视图似乎只返回200。可能是您的表单没有验证吗?

这就是说,推荐的流程是在成功的帖子上返回结果页面的重定向(google为“post redirect get”),以避免在页面重新加载时提交双重提交。

完全不相关,但是try / expect中的语句都没有引发IndexError,如果QuestionQuizz上有一个ForeignKey,你应该能够直接用{{1}检索问题}。