0

Django のテストの作成に問題があります (このフレームワークを使い始めたばかりです)。ブラウザではすべて問題なく動作しますが、TestCase を使用していると、リクエスト メソッドが POST ではないようです。コードは次のとおりです。

ビュー.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 ではないようです。助けてくれてありがとう。

4

1 に答える 1

1

インデントが壊れているためわかりにくいですが、POST リクエストフォームが有効な場合にのみビューが 200 を返すようです。フォームが検証されていない可能性がありますか?

そうは言っても、推奨されるフローは、ページのリロードでの二重送信を回避するために、投稿が成功したときに結果ページへのリダイレクトを返すことです (「投稿リダイレクト取得」の場合は google)。

まったく関係ありませんが、try/expect ブロック内のどのステートメントも IndexError を発生させませんQuestion。ForeignKey がオンになっている場合は、.Quizzquizz.question_set.all()

于 2013-11-14T14:29:48.513 に答える