【发布时间】:2023-03-03 00:15:01
【问题描述】:
我正在从 rails 3.2.19 升级到 rails 4.1.5。我正在使用 rspec-rails 2.14.0.rc1。
使用 rails 4.1.5,我的所有测试都通过了,除了少数使用存根的测试。失败的形式是:
ENV.stub(:[]).with("ADWORDS_RUN").and_return("Yes")
Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
Kernel.stub(:rand).and_return(2)
每个都返回ArgumentError: wrong number of arguments (1 for 2+)。所有人都在 3.2.19 的轨道上通过。我试过回到 rspec-rails 2.8.1,但同样的错误。也是rails 4.0,但错误仍然存在。最后一个错误(存根:rand)在我运行整个测试套件时不会发生,但在我为该测试运行单个测试文件时会发生。这是一个示例测试
it "should have google tracking code in production" do
Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
get :home
response.body.should =~ /Google Analytics Tracking code/
end
这是测试的输出:
Failure/Error: Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
ArgumentError:
wrong number of arguments (1 for 2+)
# ./spec/controllers/pages_controller_spec.rb:107:in `block (4 levels) in <top (required)>'
第 107 行是 Rails.stub 行。
请告诉我如何解决这个问题?
【问题讨论】:
-
如果您的 Gemfile 中有
gem 'minitest', require: 'minitest/autorun',请尝试将其更改为gem 'minitest' -
哪一行给出了错误?
-
仅供参考,我在 RSpec 3.0 中运行了您的代码并通过了。您使用旧版本的 RSpec 有什么原因吗?你自己跑过这三行吗?无论如何,如果您需要更多帮助,我建议您发布引发错误的特定行,最好是堆栈跟踪?
-
响应 Santosh,我没有在我的 gemfile 中指定 minitest,但我的 spec_helper.rb 中有
require 'minitest/autorun。作为对 Brad Werth 的回应,每一行都给出了错误,它们用于不同的测试。作为对 Peter Alfin 的回应,我开始使用 rspec 3,但遇到了 spork 的问题,所以回到 rspec 2。当行没有导致异常时,你如何获得堆栈跟踪,即它只是一个失败的测试。 -
据我所知,
ArgumentError: wrong number of arguments (1 for 2+)不会因为测试失败(即预期失败)而输出。这是由于在某处执行了某些语句。你能分享你的确切输出吗?
标签: ruby-on-rails rspec