2011-10-30 8 views
0

Djangoプロファイルアプリでビュー用のテストをいくつか書きたいと思っています。Djangoプロファイルアプリケーションでビューをテストするためのベストプラクティス?

ビューには、スマートなエラー処理ロジックがあります。例えばプロファイルを作成しようとすると、そのプロファイルがすでに存在する場合は、既存のプロファイルページ(またはプロファイルの編集ページ)にリダイレクトするだけです。

このエラー処理が必要に応じて動作することをテストするにはどうすればよいですか? ベストプラクティスとは何ですか?

Zombie.jsを使用してBDDを行い、タイトルが "Create profile"でないページが表示されることをテストすることが考えられます(またはタイトルが "Edit profile"のペー​​ジが表示されていることを確認してください)。しかし、Djangoのテストのドキュメントは言う:

  • 使用Djangoのテストクライアントは、正しいビューが と呼ばれ、ビューが正しいコンテキストデータを収集していることをされていることを確立します。
  • TwillやSeleniumなどのブラウザ内のフレームワークを使用して、レンダリングされた HTMLとWebページの動作、つまりJavaScript機能をテストします。

私はDjangoのテストクライアントを使用したい場合は、それは次の操作を実行できます。

  • シミュレートGETとPOST URLにリクエストをし、応答を観察する - 低レベルのHTTPからすべて(結果のヘッダーとステータスコード)をページの内容に変換します。
  • 特定のURLに対して正しいビューが実行されていることをテストします。
  • 特定のDjangoテンプレートによって特定のリクエストがレンダリングされ、特定の値を含むテンプレートコンテキストがテストされることをテストします。

テストクライアントを使用してページコンテンツを表示する必要がありますか?どのようなテンプレートがレンダリングされたのか分かりますか?このビューをテストする適切な方法は何ですか?

答えて

1

リダイレクトとプロファイルの作成は非常にdjangoなので、JS機能をテストするために他のフレームワークを使用するかもしれませんが、このインスタンスにはdjangoテストクライアントを使用しています。

あなたのテストにどのくらいの距離を置くかは、ケースバイケースで決める必要があります。時間は限られており、一部の側面は他のものよりも破損しやすい傾向があります。たとえば、私はテンプレートの解像度を心配することはありません - 200ステータスコードとコンテンツのクイックチェックは十分です。

Anyhooは、私は(私はここで推測している)のビューがあり、異なる状態を識別することによって開始したい:

  • プロフィールを自分自身をレンダリング(などコンテンツ、テンプレート、ステータスコードを、確認してください)フォーム検証エラー
  • プロファイルフォームの成功:プロファイルの作成:成功のリダイレクト
  • スマートエラー処理/リダイレクト。

このエラー処理が必要に応じて動作することをテストするにはどうすればよいですか?

# create object with specific ID. 
# post form data that should trigger your special redirect. 
# ensure the redirect takes you to the model you just created via reverse 
response = client.post(reverse('form_url'), {'valid_form_data': ''}, follow=True) 
assertRedirects(response, reverse('view_url', args=[id]), target_status_code=200) 

これは、あなたがこのアクションをトリガーすることを決定したものは何でも与えられたデータに正しいプロファイルがリダイレクトされていることを確認します。

+0

Djangoのテストコードの外でassertRedirectsを使用できますか?私はレタス(http://lettuce.it)を使ってテストケースを作成しています。これは多くのテストを簡単に指定できるようにするためですが、私はDjango TestCaseオブジェクトの中にいるとは思いません。 –

関連する問題