2012-03-06 6 views
2

フォームオブジェクトを既知の良かった、あるいは悪い知られている辞書に対してインスタンス化することでフォームのクリーニングを簡単にテストできます。関連するビューロジックは、これらの同じ記述を使用し、テストクライアントを使用することによってテストできます。djangoフォームサブミッションの単体テスト

しかし、我々はまだ、実際のHTMLフォーム要素の基本的な問題が残っています。私が間違った方法を使用したらどうなりますか?それとも、私は行動のタイプミスですか?それともCSRF_Tokenを忘れたのですか?ユーザーが経験する可能性のある動作を実際にテストする単体テストを作成するにはどうすればよいですか?

私は機械化を本当に使用する必要がありますか?

かに.get(URL)を使用して、レスポンスのHTMLコンテンツを見ることでフォーム要素を解析する人がいますか?これを行うためのよりクリーンな方法がありますか?

+0

複雑な動作のテストは単体テストではなく、統合テストです。 django-sane-testingプロジェクトを参照してください。ほとんどすべての可能なテストケースがカプセル化されています – yedpodtrzitko

+0

「個々のテストでは、「my_good_postと同じ情報が入力されたときにページのフォームがmy_good_postと等しいオブジェクトを作成しますか?私の考え方に。私は私のユニットテストスイートでこの正確な単純な動作をテストできるようにしたいと思います。 – jMyles

答えて

0

これはDjangoの1.4に加えLiveServerTestCaseで扱うことができます。

+0

クール。彼らがそれを加えたことを知らなかった。 – miki725

1

これはDjangoのHTMLテストにいますが、HTMLの動作をテストする必要がある他のアプリケーションに関連していません。

あなたは異なった方法(GET/POST /など)を使用してブラウザの観点からフォームをテストするために、このようなrequestsなどのライブラリを使用することができます。

より多くのユーザーの相互作用試験のために、あなたは私がより良いSplinterのように個人的にしかしSeleniumを使用することができます。あなたは実際のブラウザとして使うことができるbrowserと呼ばれるこの事をインスタンス化します。ブラウザ内で、テキストボックス、ヒットボタンなどを入力し、その動作をテストすることができます。ここで

は破片のWebサイトからコードスニペットです:

from splinter.browser import Browser 
browser = Browser() 
# Visit URL 
url = "http://www.google.com" 
browser.visit(url) 
browser.fill('q', "#cobrateam") 
# Find and click the 'search' button 
button = browser.find_by_css(".lsb") 
# Interact with elements 
button.click() 
if browser.is_text_present("did not match any documents"): 
    print "nobody likes us =(" 
else: 
    print "we're popular =)" 

そこではブラウザが開きますが、GoogleにナビゲートQ欄に記入し、検索ボタンをクリックし、[テストの検索結果だろう。ご覧のように、ライブラリは非常に使いやすく、非常に洗練されたテストを行うことができます。

+0

もちろん、アプリケーションの実際のインスタンスサーバーインスタンスをテストするので、これは本当に統合テストです。どうすればdjangoテスト環境(とテストデータベース)を使用してこれを行うことができますか? – jMyles

+0

あなたの質問に本当に従うことはありませんが、djangoテストサーバーを実行すると、これらのlibsを使ってデータをテストできます。それは役に立ちますか? – miki725