为什么我的 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 一样有用的功能和修复。另一种解决方法是像您一样手动修复生成器的输出。
我用 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 一样有用的功能和修复。另一种解决方法是像您一样手动修复生成器的输出。