为什么我的 rspec-rails 生成的规范由于路由异常而失败?

Why does my rspec-rails generated spec fail due to a routing exception?

我用 Rails (4.1.16) 和 Rspec (3.5.1) 生成了一个脚手架。

它生成了这个测试:

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?)以及为什么会出现此错误。帮助理解这个问题将不胜感激。谢谢。

rspec-rails 附带的生成器(rspec:scaffold)正在使用 the syntax required by Rails 5 生成测试(请参阅该博客的最后一部分 post),它与 ​​Rails 4 不兼容。我认为这是 rspec-rails 中的错误,因为 rspec-rails 3.5 在其他方面是兼容的与 Rails 4.(我自己一起使用这些版本;我只是没有使用生成器。)

rspec-rails 是 changed to use the Rails 5 syntax in rspec-rails 3.5.0.beta4,因此一种解决方法是使用 rspec 和 rspec-rails 3.4 — 并非如此很好,因为较新的版本具有与 Rails 4 和 Rails 5 一样有用的功能和修复。另一种解决方法是像您一样手动修复生成器的输出。