ruby-on-rails-3 – 如何在rails rspec中测试cookie过期

在rspec中设置cookie有很多困惑
http://relishapp.com/rspec/rspec-rails/v/2-6/dir/controller-specs/file/cookies

在你的控制器中,通常你可以写

cookies['transaction_code'] = { :expires => 300.seconds.from_Now,:value => c }

但是在rspec中我只能写

request.cookies['transaction_code'] = transaction_code

如果我说

request.cookies['transaction_code'] = { :expires => 300.seconds.from_Now,:value => c }

我将哈希值作为我的控制器中的cookies [‘transaction_code’]的值.

现在我的问题是:如何在rspec控制器测试示例中设置/测试cookie到期?

更新:几秒钟以前:我的意思是:我如何测试控制器是否按期望对过期的cookie做出反应,但事实上,过期的cookie就像没有cookie,如果我相信cookie的实现,我应该这样做毕竟也许我的问题没有任何意义.如果是这种情况,我需要测试(另一个)控制器操作是否正确设置到期的cookie,但是如果测试中的cookie [‘transaction_code’]只给出值,我该怎么做?

解决方法

浏览器 do not send cookie attributes back to the server.这就是为什么只能将键值对发送到操作.

因为你可以假设Rails,Rack和浏览器使用参数做正确的事情,所有你真正需要测试的是你的代码传递给CookieJar的参数.

为了测试在控制器中正确设置到期设置cookie,您可以存储#cookies方法,并确保传递正确的设置.

# app/controllers/widget_controller.rb
...
def index
    cookies[:expiring_cookie] = { :value   => 'All that we see or seem...',:expires => 1.hour.from_Now }
end
...

# spec/controllers/widget_controller_spec.rb
...
it "sets the cookie" do
  get :index
  response.cookies['expiring_cookie'].should eq('All that we see or seem...')
                                               # is but a dream within a dream.
                                               #                - Edgar Allan Poe
end

it "sets the cookie expiration" do
  stub_cookie_jar = HashWithindifferentAccess.new
  controller.stub(:cookies) { stub_cookie_jar }

  get :index
  expiring_cookie = stub_cookie_jar['expiring_cookie']
  expiring_cookie[:expires].to_i.should be_within(1).of(1.hour.from_Now.to_i)
end
...

测试远远超过这个沸腾的海洋.在某些时候,您必须假定您正坐在的堆栈(例如,Rails,Rack,Web服务器,TCP / IP,OS,Web浏览器等)正常工作,并专注于您控制的代码.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...