我已经以正常方式创建了一个 Rails 引擎,安装了 RSpec,并为模型生成了一个脚手架,但我无法让任何路由规范通过。
这是一个例子:
describe Licensing::LicensesController do
it 'routes to #index' do
get('/licensing/licenses').should route_to('licensing/licenses#index')
end
end
我在这样的虚拟应用程序中运行示例:
$ cd spec/dummy
$ rake spec
/Users/brandan/.rvm/rubies/ruby-1.9.3-p194/bin/ruby -S rspec ../routing/licensing/licenses_routing_spec.rb
F
Failures:
1) Licensing::LicensesController routes to #index
Failure/Error: get('/licensing/licenses').should route_to('licensing/licenses#index')
No route matches "/licensing/licenses"
# /Users/brandan/repos/licensing/spec/routing/licensing/licenses_routing_spec.rb:5:in `block (2 levels) in <top (required)>'
Finished in 0.04345 seconds
1 example, 1 failure
引擎已正确安装在虚拟应用程序中:
# spec/dummy/config/routes.rb
Rails.application.routes.draw do
mount Licensing::Engine => "/licensing"
end
我可以进入虚拟应用程序并启动控制台并获得该路线就好了:
1.9.3p194 :001 > app.get('/licensing/licenses')
Licensing::License Load (0.3ms) SELECT "licensing_licenses".* FROM "licensing_licenses"
200
1.9.3p194 :002 > app.response.body
"<!DOCTYPE html>..."
虚拟应用程序和 RSpec 之间存在一些差异,我无法弄清楚它是什么。我发现了几篇声称可以解决这个问题的文章,但没有一篇有帮助,其中一些是特定于 Rails 3.1 的:
- Ryan Bigg 关于生成和测试引擎的文章
- Matthew Ratzloff 关于在 Rails 3.1 中测试引擎路由的文章
- Stefan Wienert 关于可安装发动机的文章
- 关于在 Rails 3.2 中测试路由助手的邮件列表消息
有人在 Rails 3.2/RSpec 2.10 中解决了这个问题吗?