我在我脑海中,无法想出办法。任何帮助或方向都会很棒。谢谢。
我有一条可以在现实生活中使用但在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中表现相同。或者是别的什么?或者有更好的测试方法吗?
我一直无法找到关于此主题的任何指向解决方案的内容,因此任何指导都会很棒。谢谢!