Ruby on rails 使用Rspec测试辅助对象中没有路径的链接

Ruby on rails 使用Rspec测试辅助对象中没有路径的链接,ruby-on-rails,ruby,rspec,rspec-rails,stubbing,Ruby On Rails,Ruby,Rspec,Rspec Rails,Stubbing,使用技巧,我在助手模块中构建了一个方法,如下所示: 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::U

使用技巧,我在助手模块中构建了一个方法,如下所示:

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'
似乎因为我在helper中进行测试,它无法确定要使用什么控制器,因此无法确定如何构建url


有人能帮我理解如何解决这个问题吗?也就是说,也许我可以将控制器存根为helper rspec?

如果您使用上述参数,这是一个肮脏的把戏

allow(helper).to receive(:params).and_return(_recall: { controller: 'homes' })
这里还有另一种方法,这是一种快速完成工作的方法


您能告诉我们相关路线吗?(在您的routes文件中和通过rake routes)@TarynEast正如我前面所述,您可以调用
link\u to
,而无需传入路径。然后,它试图推断出您当前的路径本身。它在实践中工作得很好,但是当通过rspec进行测试时(因此没有当前控制器),它会抛出这个错误。。。(顺便说一句,这是一个糟糕的短语,也许你不应该使用它)-你能告诉我们原始页面的路线吗。。。因为这将帮助我们确定它期望的参数以及导致它中断的原因:)是的,如果没有当前控制器,它很可能无法工作-为什么在您的规范中没有当前控制器?@TarynEast-哈哈..谢谢。本来不该这样说的,但现在你已经指出了,我明白你的意思了。它位于帮助器中,因此它在整个站点的许多页面(控制器操作)中使用。你问
为什么你的规范中没有当前控制器?
你如何在助手规范中定义当前控制器?哦,在助手规范中-是的,我想我错过了这一部分-我想这是在控制器规范中测试的,出于某种原因:)对不起-我的大脑放屁,请忽略。为了规范的缘故,可能有一种指定控制器的方法,但我不知道。