使用Rspec在helper中测试link_to而不使用路径

时间:2016-10-18 21:04:16

标签: ruby-on-rails ruby rspec rspec-rails stubbing

使用提示here我在辅助模块中构建了一个方法,如下所示:

describe ExampleHelper do
  def build_link
    link_to "RSS feed", params.merge(:format => :rss), :class => "feed_link"
  end
end

但是,当我测试此方法时,我收到以下错误:

 Failure/Error: subject { helper.build_link }
 ActionController::UrlGenerationError:
   No route matches {:action=>"index", :foo=>"bah", :foobah=>["1", "2", "3"], :results_per_page=>"25"}
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionpack-4.2.6/lib/action_dispatch/journey/formatter.rb:46:in `generate'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:721:in `generate'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:752:in `generate'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:799:in `url_for'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionpack-4.2.6/lib/action_dispatch/routing/url_for.rb:156:in `url_for'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionview-4.2.6/lib/action_view/routing_url_for.rb:94:in `url_for'
 # /Users/tombrammar/.rvm/gems/ruby-2.1.10@example/gems/actionview-4.2.6/lib/action_view/helpers/url_helper.rb:181:in `link_to'

似乎因为我在帮助器中测试它无法确定使用什么控制器,因此无法确定如何构建URL。

任何人都可以帮我理解如何解决这个问题吗?即也许我可以将控制器存放到助手rspec?

1 个答案:

答案 0 :(得分:1)

如果你使用上面的参数,这是一个肮脏的技巧。

allow(helper).to receive(:params).and_return(_recall: { controller: 'homes' })

另外,这是另一种方法,可以快速完成工作。

https://stackoverflow.com/a/22265920/1431800