实时路线。 rspec中没有匹配的路由

时间:2014-01-13 02:01:45

标签: ruby-on-rails ruby rspec routes rack

我在我脑海中,无法想出办法。任何帮助或方向都会很棒。谢谢。

我有一条可以在现实生活中使用但在respec中失败的catloll路线。如果我在测试路线中进行硬编码,它会通过我的测试。

基本代码

的routes.rb

class SEORoutes
  def call(env) 
    # some logic is sorted here to figure out controller/action but results in below
     controller = 'big_monkey_controller' 
     controller_class = controller.camelize.constantize
     binding.pry
     controller_class.action("show".to_sym).call(env)
  end
end

match "*stuff/:id", to: SEORoutes.new, via: :all

测试结果失败:请求

测试失败的rspec结果

ActionView::Template::Error:
  No route matches {:stuff=>"ice-cream", :id=>"yum"}

该消息发生在以下行的请求规范中

visit "/ice-cream/yum"

逐步完成

所以我逐步使用上面代码中的binding.pry。

controller_class似乎没问题

[1]pry(#<SEORoutes> controller_class
=> BigMonkeyController

controller_class.action似乎没问题

[2] pry(#<SEORoutes>)> controller_class.action("show".to_sym)
=> #<Proc:0xb9c0114c@/home/haley/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/actionpack-4.0.2/lib/action_controller/metal.rb:230>

call(env)似乎是个问题。与rspec相同的错误

[3] pry(#<SEORoutes>)> controller_class.action("show".to_sym).call(env)
ActionView::Template::Error: No route matches {:stuff=>"ice-cream", :id=>"yum"} from /home/haley/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/journey/formatter.rb:39:in `generate'

所以这就是我的头脑。似乎rspec处理Rack / call(env)与开发甚至生产不同,但我不确定。

怎么做?

如果是这种情况,我该如何让call(env)在rspec中表现相同。或者是别的什么?或者有更好的测试方法吗?

我一直无法找到关于此主题的任何指向解决方案的内容,因此任何指导都会很棒。谢谢!

0 个答案:

没有答案