4
Ich arbeite an

A Rails 3 Anwendung enthält einige Logik entspricht, auf den folgenden Code aufruft (was ich nicht ändern kann):Aufruf Rails.application.routes.recognize_path innerhalb eines rspec Test in Rails keine Route 3

Rails.application.routes.recognize_path("/customers", :method => :get) 

Das "/ Kunden" ist natürlich variabel.

Ich schreibe einen zugeordneten Rspec-Test, der den Code aufruft, der diese Logik enthält, und der Test hat eine komplette Rails-Umgebung. Wenn ich hebe folgendes:

Rails.application.routes.routes.inspect 

es die richtigen Routen enthält (zum Beispiel eine der Routen hat sie ist „GET/Kunden“).

Wenn ich den Test dann laufen, die Logik ergibt ein:

No route matches "/customers" 

wie folgt vorgehen:

@routes = Rails.application.routes 
assert_recognizes({:controller => "customers", :action => "index"}, "/customers") 

Ergebnisse in den gleichen Fehler.

Innerhalb eines Helfer-Test, die folgenden:

# this succeeds and returns "/customers" 
x = helper.customers_path 
Rails.application.routes.recognize_path(x, :method => :get) 

ergibt, wieder einmal, den gleichen Fehler (keine Route matches "/ Kunden")

Ich bin 100% positiv sicher, dass Rails .application.routes enthalten die richtigen Routen.

Hat jemand eine Idee, was die Ursache dafür ist?

Danke!

Antwort

3

Schließlich kam die Ursache für diesen dummen selbstinduzierten Fehler: vergessen, einen CustomersController zu definieren, dem die Routen zugeordnet werden.

Nach dem Tauchen in Rails 'Quelle festgestellt, dass Routing tatsächlich den Controller auf die Routen gemappt, so dass ein tatsächlicher Controller zu zuordnen ist in Ihren Spezifikationen erforderlich. :)