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在规范中可用?

您需要存根请求本身以及路径的返回值。为截断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

最新更新