2016-08-08 36 views
2

我用Rails(4.1.16)和Rspec(3.5.1)生成了一個腳手架。爲什麼我的rspec-rails生成的spec由於路由異常而失敗?

它產生此試驗:

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 

其輸出這樣的錯誤:

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=>{}} 

如果刪除了鍵參數以get,即:

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

測試傳球很好。

不確定什麼gem定義了生成器模板(rspec-rails?)以及爲什麼我得到這個錯誤。幫助將不勝感激理解這個問題。謝謝。

回答

3

發生器(rspec:scaffold,附帶rspec-rails)正在生成測試the syntax required by Rails 5(請參閱該博客的最後一部分),這與Rails 4不兼容。我認爲這是rspec-rails中的一個錯誤,因爲rspec-rails 3.5在其他方面與Rails 4兼容(我自己一起使用這些版本;我只是沒有使用過發生器。)

rspec-rails是changed to use the Rails 5 syntaxin rspec-rails 3.5.0.beta4,所以一個解決方法是使用rspec和rspec-rails 3.4 - 不太好,因爲新版本具有像Rails 5一樣有用的功能和修復。另一個解決方法是手動修復生成器的輸出。

+0

太棒了。謝謝。 –

相關問題