RSpec & Rails:帮助规范的存根 request.path
RSpec & Rails: Stub request.path for helper spec
我在ApplicationHelper
中有这个方法:
def home_link_class
classes = ['navbar-brand']
classes << 'active' if request.path == root_path
classes
end
我想这样测试:
describe '#home_link_class' do
before { allow(helper.request).to receive(:path).and_return '/some-path' }
subject { home_link_class }
it { should eq ['navbar-brand'] }
end
遗憾的是,存根似乎不起作用,助手本身中的 request
对象设置为 nil
,即使在规范中它似乎是 ActionController::TestRequest
对象。
如何确保 request
在规范中可用?
您需要存根请求本身以及路径的 return 值。为存根 path
:
的请求定义一个测试替身
describe '#home_link_class' do
let(:request) { double('request', path: '/some-path') }
before { allow(helper).to receive(:request).and_return(request) }
subject { home_link_class }
it { should eq ['navbar-brand'] }
end
我在ApplicationHelper
中有这个方法:
def home_link_class
classes = ['navbar-brand']
classes << 'active' if request.path == root_path
classes
end
我想这样测试:
describe '#home_link_class' do
before { allow(helper.request).to receive(:path).and_return '/some-path' }
subject { home_link_class }
it { should eq ['navbar-brand'] }
end
遗憾的是,存根似乎不起作用,助手本身中的 request
对象设置为 nil
,即使在规范中它似乎是 ActionController::TestRequest
对象。
如何确保 request
在规范中可用?
您需要存根请求本身以及路径的 return 值。为存根 path
:
describe '#home_link_class' do
let(:request) { double('request', path: '/some-path') }
before { allow(helper).to receive(:request).and_return(request) }
subject { home_link_class }
it { should eq ['navbar-brand'] }
end