在rspec测试中调用Rails.application.routes.recognize_path与Rails 3中的任何路由都不匹配

时间:2011-01-11 13:33:22

标签: ruby-on-rails ruby-on-rails-3 rspec routes specifications

我正在处理的Rails 3应用程序包含一些调用以下代码的逻辑(我无法更改):

Rails.application.routes.recognize_path("/customers", :method => :get)

“/ customers”当然是变数。

我正在编写一个关联的Rspec测试,该测试调用包含所述逻辑的代码,并且测试具有完整的Rails环境。当我提出以下内容时:

Rails.application.routes.routes.inspect

它包含正确的路线(例如,其中一条路线是“GET / customers”)。

当我运行测试时,逻辑结果为:

No route matches "/customers"

执行以下操作:

@routes = Rails.application.routes
assert_recognizes({:controller => "customers", :action => "index"}, "/customers")

导致同样的错误。

在帮助测试中,以下内容:

# this succeeds and returns "/customers"
x = helper.customers_path
Rails.application.routes.recognize_path(x, :method => :get)

再次导致相同的错误(无路由匹配“/ customers”)

我100%肯定Rails.application.routes包含正确的路由。

有没有人知道这是什么原因?

谢谢!

1 个答案:

答案 0 :(得分:3)

最后遇到了这个愚蠢的自我诱导错误的原因:忘了定义路由映射到的CustomersController。

潜入Rails' source发现路由实际上是映射到路由的控制器,因此在您的规范中需要一个映射到的实际控制器。 :)