python - Django测试客户端-发送POST数据返回400错误

标签 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()

测试.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。感谢您的帮助。

最佳答案

鉴于您的缩进不完整,很难判断,但您的 View 似乎只会返回 200,前提是它是 POST 请求并且表单有效。可能是您的表单未通过验证?

话虽这么说,推荐的流程是在成功的帖子上返回一个重定向到结果页面(谷歌的“post redirect get”)以避免在页面重新加载时重复提交。

完全不相关,但在您的 try/expect block 中没有任何语句会引发 IndexError,如果 QuestionQuizz 上有 ForeignKey,您应该能够检索问题直接使用 quizz.question_set.all()

关于python - Django测试客户端-发送POST数据返回400错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980047/

相关文章:

python - pytest 无法从 File1 导入类,但不能从同一文件导入类 A

java - Maven 单元测试

c++ - 如何在 QT 应用程序中的嵌入式 Python 中休眠

python - 在 req.path 中使用 django 的反向函数

django - 模型形式。为什么我的表单没有填充模型中的数据?

c# - 起订量与 Func<Foo, Task<List<Bar>>>>

python - Matplotlib 窗口大小、标题等

python - 在将 xml 文件提供给解析器之前如何忽略 xml 标记中的特殊字符

python - 如何加速python中的循环

javascript - jquery onclick 没有发生 - Django