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

...然后重定向到主页;

Cookie 包括一些标志:例如httpOnlySecure等。

如何测试 cookie 是否包含带有 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
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 回答