2012-10-22 60 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

如何测试cookies是否包含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请求,并且没有real生成了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标志,你在你的回复中看到的,你将不得不使用real http请求。也许你可以使用它的水豚宝石?

+0

嗯..其实'水豚'是超出我的工作范围,但仍然谢谢; – ted

+0

饼干怎么设置呢?你是否在控制器中这样做? – severin

+0

其中一个是由'Authlogic'创建的,另一个是'ActionController',我相信 – ted