2009-05-30 11 views
2

機能テストでクッキーを送信するにはどうすればよいですか?クッキーがクリアされていることを確認するにはどうすればテストできますか?Railsのクッキー値のクリアをテストしますか?

私はTDDを使ってRailsアプリケーション用のモデルを構築するのに大成功を収めましたが、コントローラーテストに関しては問題がありました。テストで一度クッキー値を設定して読み込むことはできますが、それらをクリアします。つまり:

test "clears cookie" do 
    get :set_it, :stuff => {'key' => 'value'} # stuff to cookify 
    assert cookies['key'] == 'value' # works fine 

    get :clear_it # cookie doesn't get sent. How do I simulate this? 
    assert nil == cookies['key'], 'Cookie not cleared' # fails 
end 

レール検査ガイドでは、データがサーバーに設定されたことを確認するために、どれだけ、テストでのクッキーの送信をシミュレートする方法を言及していません。私は、応答が送信されるまで、クッキーデータがサーバー上で変更されていない前の状況に遭遇したことを知っています。ここで何が起きているのですか?私は機能テストが「クライアントである」というより良い仕事をしたと思っていた。

これは広く知られている問題ですか?このようなことで人々がJUnitを使用するだけで辞任していますか?私は本当に1つのフレームワークをのすべてまたはほとんどすべての私のtddを使用できるようにしたいと思います。


私は楽観的に@ response.cookiesを試してみましたが、どちらもうまくいきませんでした。

+0

マニュアルテスト - クッキーを* .html.erbファイルに出力する - クッキーが実際にクリアされていることを示しています。なぜこれは動作しないのですか? – Mike

答えて

1

マイログアウトテストは動作します

assert_nil @response.cookies["auth_token"] 

を持っていました。

nilでない場合、どのような価値がありますか?

+0

このテストを試しましたが、クッキーを削除しないと失敗しないという問題があります。 – Tobias

2

クッキーの設定を解除する際にユニットテストを行う場合は、実際にはレスポンスにクッキーに何も設定しないヘッダーが含まれているかどうかをテストします。私はあなたのget :clear_itcookies.delete :cookie-nameをやっていると仮定しています。これにより、response.headerにSet-[COOKIE-NAME]=;が含まれます。他のメソッドが失敗している場合は、その文字列を直接探すことができます。

あなたのコードで怪しいと思われるのは、ちょうどcookiesをチェックしているということです。あなたの「get」リクエストからの応答はどこにありますか?

それ以外の場合は、hereのようにwebratとの統合テストを使用することもできます。これは単体テストと同じくらい大きいかもしれませんが、少なくとも機能をチェックします。

+0

これは私の検索の間に私が遭遇した最高の答え、それは間違いなく受け入れられるべきである。 –

関連する問題