リダイレクトだとフィルタはかからない?

■これは勘違い以下のような状況で起きた

  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リクエストの解析後かつ、
アクションの実行前だから。
もちろん、レンダリングはアクションを呼ばないので、フィルタにはかからない。