2010-06-17 9 views
1

Je les routes suivantes dans mon application:Rails Test fonctionnel sur un itinéraire personnalisé

     GET /admin/comments(.:format)     {:controller=>"admin/comments", :action=>"index"} 
     admin_comments POST /admin/comments(.:format)     {:controller=>"admin/comments", :action=>"create"} 
    new_admin_comment GET /admin/comments/new(.:format)    {:controller=>"admin/comments", :action=>"new"} 
         GET /admin/comments/:id(.:format)    {:controller=>"admin/comments", :action=>"show"} 
         PUT /admin/comments/:id(.:format)    {:controller=>"admin/comments", :action=>"update"} 
     admin_comment DELETE /admin/comments/:id(.:format)    {:controller=>"admin/comments", :action=>"destroy"} 
    edit_admin_comment GET /admin/comments/:id/edit(.:format)  {:controller=>"admin/comments", :action=>"edit"} 
admin_approve_comment  /admin/comments/approve/:id    {:module=>"admin", :controller=>"admin/comments", :action=>"approve"} 
    admin_reject_comment  /admin/comments/reject/:id    {:module=>"admin", :controller=>"admin/comments", :action=>"reject"} 

qui est déclarée comme:

namespace "admin" do 

    resources :comments 

    match '/comments/approve/:id' => 'comments#approve', :as => "approve_comment", :module => "admin" 
    match '/comments/reject/:id' => 'comments#reject', :as => "reject_comment", :module => "admin" 
    end 

et un test fonctionnel comme celui-ci:

context "a POST to :approve" do 
    setup do 
     comment = Factory(:comment) 
     sign_in Factory(:admin) 
     post :approve, :id => comment.id 
    end 

    should respond_with :success 
end 

Cependant, quand je cours ceci, je reçois:

test: a POST to :approve should respond with 200. (Admin::CommentsControllerTest): 
ActionController::RoutingError: No route matches {:action=>"approve", :id=>339, :controller=>"admin/comments"} 

Quel est le problème ici? Quelle erreur stupide fais-je?

+0

Comment avez-vous défini cela dans le fichier de routes? Peux-tu le poster aussi? –

+0

Déclaration de routes ajoutée –

Répondre

2

Ces routes ressemblent à des routes membres pour moi. Donc, le routage de cette façon

 
    namespace "admin" do 
    resources :comments do 
     member do 
     get :approve 
     get :reject 
     end 
    end 
    end 

Cela va générer des routes comme/admin/comments /: id/approval. C'est la voie des rails autant que je sache.

0

Je pense qu'il est préférable de mettre en correspondance avant les ressources. Parce que ce n'est pas vérifier si c'est bon ou pas.