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

标签 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 包含正确的路由。

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

谢谢!

最佳答案

终于遇到了这个愚蠢的自引发错误的原因:忘记定义路由映射到的CustomersController。

在深入研究 Rails 的源代码后,发现路由实际上将映射到路由的 Controller 常量化,因此在您的规范中需要映射到的实际 Controller 。 :)

关于ruby-on-rails - 在 rspec 测试中调用 Rails.application.routes.recognize_path 与 Rails 3 中的任何路由都不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658160/

相关文章:

ruby-on-rails-3 - Rails 3.2 是否有涵盖向用户分配管理属性的教程?

ruby - 如果在使用 rspec 的 sinatra 应用程序中响应字符集是 utf-8,我怎么能得到 "test"?

ruby - 我可以监视类(class)吗?

ruby-on-rails - 更新到 Rails 4 后 Assets 预编译的问题

ruby-on-rails - 将 Heroku 环境变量传输到 Docker 实例

ruby-on-rails-3 - Ruby on Rails 3 : Setters and Getters and self inside a controller method

ruby-on-rails - Capybara 在/test 而不是/spec 中生成测试

sql - datetime 的值始终为 nil

ruby-on-rails - 如何通过关系强制 rails 不使用 has_many 的缓存结果?

ruby-on-rails - 简单表格 : How can I create a custom wrapper that does not wrap the input and create a label?