2

Ich mache ein einfaches Testprojekt, um mich auf meinen Test vorzubereiten. Ich bin ziemlich neu bei verschachtelten Ressourcen, in meinem Beispiel habe ich ein Newsitem und jedes Newselement hat Kommentare.Problem mit Routen im Funktionstest

Das Routing sieht wie folgt aus:

resources :comments 

resources :newsitems do 
    resources :comments 
end 

Ich gründe die funktionalen Tests für Kommentare zur Zeit und ich lief in einige Probleme.

Dies wird den Index der Kommentare eines Newstitels erhalten. @Newsitem wird im Setup vonc deklariert.

test "should get index" do 
    get :index,:newsitem_id => @newsitem 
    assert_response :success 
    assert_not_nil assigns(:newsitem) 
end 

Aber das Problem liegt hier, in der "sollte neu".

test "should get new" do 
    get new_newsitem_comment_path(@newsitem) 
    assert_response :success 
end 

Ich bekomme den folgenden Fehler.

ActionController::RoutingError: No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"} 

Aber wenn ich in die Routen-Tabelle anschaue, sehe ich dies:

new_newsitem_comment GET /newsitems/:newsitem_id/comments/new(.:format)  {:action=>"new", :controller=>"comments"} 

Kann ich nicht verwenden Sie den Namen Pfad oder was ich falsch hier?

Vielen Dank im Voraus.

Antwort

0

(Unter der Annahme, Rails 3)

die Sie interessieren in Ihrem routes.rb

GET 'newsitems/:newsitem_id/comments/new(.:format)' => 'comments#new', :as => :new_newsitem_comment 
+0

Immer noch die gleichen problemen. Ich verwende get: index, {: controller => "/ Kommentare",: newsitem_id => @newsitem} jetzt und es gibt keine Fehler zurück. Aber das bringt mich nur zum Host: port/comments/new right? Aber es sollte kein Problem sein, da ich das newsitem damit richtig gebe? Finden Sie es nur so seltsam, warum ich die Pfade nicht verwenden kann: s – Wishmaster

+0

Da Sie tatsächlich verschachtelte Ressourcen in 'routes.rb' angeben, sollten Sie diese Zeile komplett entfernen. Schienen sollten einen benannten Pfad für Sie eingerichtet haben. Überprüfen Sie die Ausgabe von 'Rake Routen', aber es sollte etwas wie' new_newsitem_comment' sein. –

7

das Problem in der Art und Weise ist der Test der URL angibt. Die Fehlermeldung lautet:

No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"} 

und natürlich gibt es keine Aktion "/ Nachrichtenmeldungen/1/Kommentare/new" genannt. Sie möchten den Hash { :controller => :comments, :action => :new, :news_item_id => 1 } übergeben.

Die richtige Syntax ist einfach:

get :new, :news_item_id => 1 
+0

Ich hatte ein ähnliches Problem mit Funktionstests, wo ich viele verschachtelte Routen hatte. Das hat enorm geholfen! Danke @zetetic –