2012-10-22 19 views
7

は、サーバは、クッキー(資格情報といくつかのアプリのCookie)私を送り返す:テスト応答クッキーが

Response sent 170 bytes of Cookie data: 
Set-Cookie: user_credentials=val; path=/; HttpOnly; Secure 

Response sent 554 bytes of Cookie data: 
Set-Cookie: _app_session=otherVal; path=/; HttpOnly; Secure 

を...そしてホームページにリダイレクトします。

Cookieにはいくつかのフラグが含まれています。 httpOnly,Secureなど

クッキーにRspecのフラグが含まれているかどうかをテストするにはどうすればよいですか?

少なくとも、これらのクッキーはどこにありますか?

it "should generate cookies with proper flags" do  
    params = Factory.attributes_for(:user, 
     :username => "uname", 
     :password => "upass" 
    ) 
    # login 
    post 'create', params 

    response.should redirect_to home_url # => pass 

    puts "response cookie = #{response.cookies.inspect}" # => {} // no cookies in response, why? 
end 

答えて

6

コントローラの仕様が生成/ リアル http要求を起動していない、彼らはテスト中のコントローラを設定し、それに要求されたアクションを呼び出します。 http要求は行われず、の実のhttp応答は生成されません。したがって、Railsコントローラの内部動作をより抽象的なレベルでしかテストすることはできません。種類をテストするには

it "should set some cookie values" do 
    get :set_cookies 

    # response.cookies looks like this: 
    # {'foo' => 'bar', 'lorem' => 'ipsum'}  

    response.cookies['foo'].should == 'bar' 
    response.cookies['lorem'].should == 'ipsum' 
end 

:スペックでのアクセスは以下の値で

def set_cookies 
    cookies[:foo] = 'bar' 
    cookies[:lorem] = {:value => 'ipsum', :expires => 3.days.from_now} 

    render :nothing => true 
end 

結果:

これらの仕様でCookie処理は、このようなアクションでクッキーを設定し、かなり単純ですあなたの応答に表示されるクッキーフラグのうち、実際の http要求を使用する必要があります。多分あなたはそれのためにカピバラの宝石を使用することができますか?

+0

実際には「カピバラ」は仕事の範囲外ですが、まだありがとうございます。 – ted

+0

クッキーはどのように設定されていますか?コントローラーでそれをやっていますか? – severin

+0

それらのうちの1つは 'Authlogic'の宝石によって設定され、もう1つは' ActionController'のものです – ted

関連する問題