我可以通过以下方式将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
如何为我的测试创建这些cookie?
我正在使用rails 3.1和rspec 2.6.0。
答案 0 :(得分:5)
使用
cookies.permanent['foo'] = 'bar'
cookies.signed['foo'] = 'bar'
cookies.permanent.signed['foo'] = 'bar'
相反
答案 1 :(得分:0)
假设您有以下Rails帮助程序:
module ApplicationHelper
def set_cookie(name, value)
cookies.permanent.signed[name] = value
end
end
要使用 RSpec 2.11.0 在 Rails 3.2.6 中对此进行测试,您可以执行以下操作:
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
对象。这允许我测试它已被调用。
你真的不应该担心天气导轨本身设置永久性cookie,因为它已经过测试。