2016-08-08 50 views
2

Ich generierte ein Gerüst mit Rails (4.1.16) und Rspec (3.5.1).Warum schlägt meine rspec-rails-generierte Spezifikation aufgrund einer Routing-Ausnahme fehl?

Es erzeugt diesen Test:

describe "GET #show" do 
    it "assigns the requested team as @team" do 
    team = Team.create! valid_attributes 
    get :show, params: {id: team.to_param}, session: valid_session 
    expect(assigns(:team)).to eq(team) 
    end 
end 

Welche diesen Fehler gibt:

TeamsController GET #show assigns the requested team as @team 
Failure/Error: get :show, params: {id: team.to_param}, session: valid_session 

ActionController::UrlGenerationError: 
    No route matches {:action=>"show", :controller=>"teams", :params=>{:id=>"82"}, :session=>{}} 

Wenn entferne ich die Schlüssel zu den Parametern get, das heißt:

get :show, {id: team.to_param}, valid_session 

Der Test geht gut.

Nicht sicher, welcher Edelstein die Generatorschablone (rspec-Schienen?) Definiert und warum ich diesen Fehler bekomme. Hilfe wäre willkommen, dieses Problem zu verstehen. Vielen Dank.

Antwort

3

Der Generator (rspec:scaffold, der mit rspec-rails kommt) erzeugt Tests mit the syntax required by Rails 5 (siehe den letzten Abschnitt dieses Blogbeitrags), der nicht mit Rails 4 kompatibel ist. Ich denke, das ist ein Fehler in rspec-rails , da rspec-rails 3.5 ansonsten mit Rails 4 kompatibel ist. (Ich benutze diese Versionen zusammen; ich habe den Generator einfach nicht benutzt.)

rspec-rails war changed to use the Rails 5 syntaxin rspec-rails 3.5.0.beta4, also eine Abhilfe zu verwenden ist rspec und rspec-rails 3.4 - nicht so nett, da die neueren Versionen Funktionen und Fixes haben, die bei Rails 4 genauso nützlich sind wie bei Rails 5. Eine andere Lösung besteht darin, die Ausgabe des Generators manuell zu korrigieren.

+0

Super Antwort. Vielen Dank. –