J'ai écrit un moteur Rails 3.1 avec l'espace de nom Posts. Ainsi, mes contrôleurs se trouvent dans app/controllers/posts/, mes modèles dans app/models/posts, etc. Je peux tester les modèles sans problème. La spécification d'un modèle ressemble à...
module Posts
describe Post do
describe 'Associations' do
it ...
end
... et tout fonctionne bien.
Cependant, les spécifications des contrôleurs ne fonctionnent pas. Le moteur Rails est monté à /posts, mais le contrôleur est Posts::PostController. Ainsi, les tests cherchent à ce que la route du contrôleur soit posts/posts.
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
ce qui donne...
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
J'ai essayé toutes sortes d'astuces dans le fichier routes de l'application de test... :namespace, etc, sans succès.
Comment faire pour que ça marche ? Il semble que ce ne soit pas le cas, puisque le moteur place le contrôleur dans /posts, alors que l'espacement des noms place le contrôleur dans /posts/posts pour les besoins du test.