如何使用rspec测试签名或永久cookie?

如何使用rspec测试签名或永久cookie?,rspec,ruby-on-rails-3.1,Rspec,Ruby On Rails 3.1,我可以通过以下方式为请求编写cookie: request.cookies['foo'] = 'bar' 但这些都不起作用: request.cookies.permanent['foo'] = 'bar' request.cookies.signed['foo'] = 'bar' request.cookies.permanent.signed['foo'] = 'bar' # what I really want 我收到空的散列消息,如以下消息: NoMethodError: u

我可以通过以下方式为请求编写cookie:

request.cookies['foo'] = 'bar'
但这些都不起作用:

request.cookies.permanent['foo'] = 'bar'
request.cookies.signed['foo'] = 'bar'
request.cookies.permanent.signed['foo'] = 'bar' # what I really want
我收到空的散列消息,如以下消息:

NoMethodError:
    undefined method `signed' for {}:Hash
如何为我的测试创建这些cookies


我使用的是rails 3.1和rspec 2.6.0。

假设您有以下rails助手:

module ApplicationHelper
  def set_cookie(name, value)
    cookies.permanent.signed[name] = value
  end
end
要在Rails 3.2.6中使用RSpec 2.11.0进行测试,您可以执行以下操作:

require 'spec_helper'

describe ApplicationHelper do
  it "should set a permanent, signed cookie" do
    cookies.should_receive(:permanent).once.and_return(cookies)
    cookies.should_receive(:signed).once.with(:user_id, 12345)
    helper.set_cookie(:user_id, 12345)
  end
end
我从来没有在使用rspec测试
cookies时遇到过问题。signed[:foo]。should==“bar”
,但是调用
cookies。permanent
过去给我带来了问题。在上面,我实际上只是将
permanent
方法存根,然后再次返回
cookies
对象。这允许我测试它是否已被调用

您真的不必担心weather rails本身设置了一个永久cookie,因为它已经过测试。

使用

cookies.permanent['foo'] = 'bar'
cookies.signed['foo'] = 'bar'
cookies.permanent.signed['foo'] = 'bar' 

相反

失败/错误:response.cookies.should_receive(:permanent).once.and_return(cookies)NoMethodError:for的未定义方法'should_receive'#必须启用模拟这会引发错误
NoMethodError:for的未定义方法'signed'。