blu*_*blu 4 rspec ruby-on-rails-3.1
我可以通过以下方式将Cookie写入请求:
request.cookies['foo'] = 'bar'
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用:
request.cookies.permanent['foo'] = 'bar'
request.cookies.signed['foo'] = 'bar'
request.cookies.permanent.signed['foo'] = 'bar' # what I really want
Run Code Online (Sandbox Code Playgroud)
我得到像这样的消息的空哈希消息:
NoMethodError:
undefined method `signed' for {}:Hash
Run Code Online (Sandbox Code Playgroud)
如何为我的测试创建这些cookie?
我使用rails 3.1和rspec 2.6.0.
小智 5
使用
cookies.permanent['foo'] = 'bar'
cookies.signed['foo'] = 'bar'
cookies.permanent.signed['foo'] = 'bar'
Run Code Online (Sandbox Code Playgroud)
代替
假设您有以下 Rails 助手:
module ApplicationHelper
def set_cookie(name, value)
cookies.permanent.signed[name] = value
end
end
Run Code Online (Sandbox Code Playgroud)
要使用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
Run Code Online (Sandbox Code Playgroud)
我从来没有遇到过使用 rspec 来测试的问题,但是在过去cookies.signed[:foo].should == 'bar'调用 to给我带来了问题。cookies.permanent上面,我实际上只是对permanent方法进行存根并再次返回cookies对象。这使我可以测试它是否已被调用。
您真的不必担心天气导轨本身会设置永久 cookie,因为它已经过测试。
| 归档时间: |
|
| 查看次数: |
2000 次 |
| 最近记录: |