8

アプリにログインすると、サーバーから Cookie (資格情報と一部のアプリの 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

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

httpOnlyCookie には、Secure、 などのフラグが含まれます。

Cookie に Rspec でこれらのフラグが含まれているかどうかをテストするにはどうすればよいですか?

少なくともどこでそれらの Cookie を見つけることができますか?

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
4

1 に答える 1

8

コントローラーの仕様は、実際のhttp 要求を生成/呼び出しません。テスト対象のコントローラーをセットアップし、要求されたアクションを呼び出すだけです。http 要求は行われず、実際のhttp 応答は生成されません。そのため、Rails コントローラーの内部動作をより抽象的なレベルでのみテストできます。

これらの仕様での Cookie の処理はかなり単純で、次のようなアクションで Cookie を設定します。

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

  render :nothing => true
end

仕様でアクセス可能な次の値になります。

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

応答に表示される Cookie フラグの種類をテストするには、実際のhttp 要求を行うものを使用する必要があります。カピバラの宝石を使用できますか?

于 2012-10-24T18:30:28.860 に答える