我用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定义了生成器模板(respect -rails?),为什么我得到这个错误。了解这个问题将不胜感激。谢谢。
生成器(rspec:scaffold
,随aspect - Rails一起提供)正在使用Rails 5所需的语法生成测试(请参阅该博客文章的最后一部分),而Rails 5与Rails 4不兼容。我认为这是aspect - Rails的一个bug,因为aspect - Rails 3.5与Rails 4是兼容的。(我自己也在使用这些版本;我只是没有使用生成器。)
aspect - Rails在aspect - Rails 3.5.0中被更改为使用Rails 5语法。所以一个解决办法是使用rspec和respect - Rails 3.4——不是很好,因为新版本的特性和修复在Rails 4和Rails 5中一样有用。另一个解决方法是手动修复生成器的输出。