【问题标题】:Generated RSpec controller test is failing with wrong number of arguments (given 2, expected 1)生成的 RSpec 控制器测试因参数数量错误而失败(给定 2,预期为 1)
【发布时间】:2019-10-27 16:37:12
【问题描述】:

我有一个全新的 rails 6 应用程序,并且我安装了 rspec。

我创建了一个控制器,当我运行 rspec 时出现此错误:

PagesController GET #index returns http success
     Failure/Error: get :index

     ActionView::Template::Error:
       wrong number of arguments (given 2, expected 1)
     # ./spec/controllers/pages_controller_spec.rb:7:in `block (3 levels) in <top (required)>'
     # ------------------
     # --- Caused by: ---
     # ArgumentError:
     #   wrong number of arguments (given 2, expected 1)
     #   ./spec/controllers/pages_controller_spec.rb:7:in `block (3 levels) in <top (required)>'

生成的 rspec 测试如下所示:

require 'rails_helper'

RSpec.describe CartController, type: :controller do

  describe "GET #index" do
    it "returns http success" do
      get :index
      expect(response).to have_http_status(:success)
    end
  end

end

生成的代码中是否存在错误或其他环境问题导致此问题?

我看不出哪里有 2 个参数?

【问题讨论】:

  • 不要将控制器规格添加到新应用中。 “请求规范提供了控制器规范的高级替代方案。事实上,从 RSpec 3.5 开始,Rails 和 RSpec 团队都不鼓励直接测试控制器,而是支持像请求规范这样的功能测试。”

标签: ruby-on-rails rspec


【解决方案1】:

根据以下 GitHub issue 对于 Rails 6,升级到 rspec-rails 4.0

gem 'rspec-rails', '~> 4.0.0.beta3'

this GitHub issue 中也引用了 rspec-rails。

2021 年 7 月更新

这个问题会产生相当规律的流量,并且 rspec-rails 现在已经远远超过 4.0.0beta3 版本。 (从今天起为 v5.0.1)始终在 https://rubygems.org/gems/rspec-rails 检查最新版本并改用它:

gem 'rspec-rails', '~> 5.0.1'

【讨论】:

  • 感谢您保持最新状态。升级到 Ruby 3 将对此产生很大影响。
  • 我正在使用 ruby​​ 3 但仍然添加 'rspec-rails', '~> 5.0.1' 并不能解决问题。 @anothermh 你能帮忙吗?
  • Ruby 2.7 Rails 5.2 rspec-rails 5.1.1 我今天才开始看到这个错误 - 最近测试没有改变
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2020-09-12
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多