名前空間 Posts を使用して Rails 3.1 エンジンを作成しました。したがって、コントローラーは app/controllers/posts/ にあり、モデルは app/models/posts などにあります。モデルを問題なくテストできます。1つのモデルの仕様は次のようになります...
module Posts
describe Post do
describe 'Associations' do
it ...
end
...そして、すべて正常に動作します。
ただし、コントローラーの仕様は機能しません。Rails エンジンは /posts にマウントされていますが、コントローラーは Posts::PostController です。したがって、テストはコントローラールートがポスト/ポストであることを探します。
describe "GET index" do
it "assigns all posts as @posts" do
Posts::Post.stub(:all) { [mock_post] }
get :index
assigns(:posts).should eq([mock_post])
end
end
それは...
1) Posts::PostsController GET index assigns all posts as @posts
Failure/Error: get :index
ActionController::RoutingError:
No route matches {:controller=>"posts/posts"}
# ./spec/controllers/posts/posts_controller_spec.rb:16
テストアプリのルートファイルであらゆる種類のトリックを試しました... :名前空間など、役に立ちませんでした。
どうすればこれを機能させることができますか? エンジンはコントローラーを /posts に配置しますが、名前空間はテスト目的でコントローラーを /posts/posts に配置するため、そうではないようです。