■これは勘違い以下のような状況で起きた
before_filter :reset_ses, :only => :index def to_index redirect_to :action => "index" end private def reset_ser reset_session end ---------------------------- ここで、テスト def test_reset_ses test_login assert session[:user_id] get :to_index assert_redirected_to :action => "index" assert_nil session[:user_id] end => F sessionはnilにはならない。 これは、次のようにする def test_dummy test_login assert session[:student_id] get :dummy assert_redirected_to :action => "index" follow_redirect assert_nil session[:student_id] end
assert_redirected_toは、そこにリダイレクトが行われることを確認するだけで、実際に
リダイレクトはしない。つまり、上のコードだと、to_indexのendの時点で処理が終わる。
当然この時点では、sessionの値はある。よって、このあときちんとリダイレクトさせる必要
がある。
filterはきちんとかかる。但し、メソッドを直接読んだ場合はかからない。
これは、フィルタが呼ばれるのは、ブラウザから来たHTTPリクエストの解析後かつ、
アクションの実行前だから。
もちろん、レンダリングはアクションを呼ばないので、フィルタにはかからない。