通常の方法でRailsエンジンを作成し、RSpecをインストールして、モデルのスキャフォールドを生成しましたが、ルーティング仕様を渡すことができません。
これが1つの例です:
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の間に多少の食い違いがあり、それが何であるかわかりません。この問題を解決すると主張する記事をいくつか見つけましたが、どれも役に立ちませんでした。それらのいくつかはRails3.1に固有のものです。
- エンジンの生成とテストに関するRyanBiggの記事
- Rails3.1でのエンジンルートのテストに関するMatthewRatzloffの記事
- マウント可能なエンジンに関するStefanWienertの記事
- Rails3.2でのルーティングヘルパーのテストに関するメーリングリストメッセージ
Rails 3.2 / RSpec 2.10でこの問題を解決した人はいますか?