【问题标题】:Why does my rspec-rails generated spec fail due to a routing exception?为什么我的 rspec-rails 生成的规范由于路由异常而失败?
【发布时间】:2016-08-08 14:48:40
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rspec rspec-rails


    【解决方案1】:

    生成器(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 syntax in rspec-rails 3.5.0.beta4,因此一种解决方法是使用 rspec 和 rspec-rails 3.4 — 不太好,因为新版本具有与 Rails 4 和 Rails 5 一样有用的功能和修复。另一种解决方法是像您一样手动修复生成器的输出。

    【讨论】:

    • 很棒的答案。谢谢。
    猜你喜欢
    • 2015-04-19
    • 2012-11-16
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2017-08-04
    • 2014-08-02
    相关资源
    最近更新 更多