22

テストをデバッグするにはどうすればよいですか? たとえば、エントリを作成するために POST し、それが検証されて特定のページが返されることを期待しています。これはブラウザーとシェルで機能しますが、失敗するのはテストだけです (皮肉なことに!)。エラーや何かを読むことができるように、コンソールなどに応答を出力したいと思います。しかし、私は自分が見ているものしか見ることができませんprint

必要かどうかはわかりませんが、問題のテスト コードは次のtests.pyとおりです。

    resp = self.client.post('/meal/invite/', 
        {'summary': 'Test munch', 'when': now(), 'max_diners': '1', 'description': 'Munchies'}, follow=True)
    self.assertEqual(resp.status_code, 200)
    self.assertContains(resp, 'Test munch', 1)
    self.assertContains(resp, 'You are hosting this meal', 1)

最後の主張は間違っています。「フィールドが必要です」エラーを示す元のフォームページにある値に変更すると、合格します。何が欠けているのかわかりません。

他にもいくつかのテストが機能していますが、これをデバッグする方法がわかりません。

それはどのように行われますか?

4

6 に答える 6

12

pdb立ち寄ってすべてを調べることができます。

使用してnoseいる場合は、テストを実行する必要があると思います-s

 -s, --nocapture       Don't capture stdout (any stdout output will be
                        printed immediately) [NOSE_NOCAPTURE]

これが、出力がすぐに表示されない理由です。

于 2012-10-19T20:35:22.943 に答える
11

pdb でテストを実行するには:

python -m pdb manage.py test yourapp

私はAlasdairに同意します。印刷されたresponse.content(および一般的な印刷物)は大きな助けになります。出力は通常のテスト ランナーの出力と混同されるため、問題を見つけて修正したら削除する必要がありますが、問題を絞り込むのに役立ちます。

また、コードがブラウザーとシェルでは機能するが、単体テストでは機能しない場合は、単体テストによって新しい (空の) データベースが作成されることに注意してください。テストに必要なすべてのデータがセット アップに含まれていることを確認してください。

(パトリックの提案からコード部分を更新しました、パトリックに感謝します)

于 2013-06-14T03:27:47.930 に答える
6

最も簡単な方法はprint response.content、アサーションの前に追加することです。出力は少し圧倒される可能性がありますが、多くの場合、問題を見つけるのに十分です。

それでも解決しない場合は、ドキュメントに記載されている役立つ機能がたくさんあります。いくつかのprintステートメントを追加して、何が得られるかを確認してください。ここにいくつかの提案がありますが、これらに限定しないでください。ドキュメントにはさらに多くのツールがあります。

https://docs.djangoproject.com/en/dev/topics/testing/

まず、ページが実際に期待どおりにリダイレクトされていることを確認する必要があります。redirect_chainまたはを使用してみてくださいassertRedirects

なんらかの理由で投稿データが無効になっていると思われます。応答コンテキストからフォームを取得できます。

form = response.context['form']
print form.is_valid()
print form.errors
于 2012-10-20T12:30:37.223 に答える
0

PydevでEclipse IDEを使用して、引数がテストコマンドであるデバッグ構成を作成できます。何かのようなもの:

test  users.tests.selenium_tests.UsersTestCase.test_user_creation --keepdb --settings=project.settings.test_settings

ここに画像の説明を入力

次に、ブレークポイントとステップバイステップのワークフロー、変数、式などで Pydev デバッガーを使用します。

ドキュメントはこちら ( http://www.pydev.org/manual_adv_debugger.html ) にありますが、Django については言及していません。

于 2018-07-18T17:09:12.080 に答える