rspec存根提供错误的参数数量错误

时间:2014-09-28 08:05:37

标签: ruby-on-rails rspec

我正在从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行。

请让我知道如何纠正这个问题?

1 个答案:

答案 0 :(得分:2)

我无法找到导致此问题的原因,但我确实找到了解决方法。它是将所有stub语句更改为较新的rspec allow语法。例如,

 Rails.stub(env: ActiveSupport::StringInquirer.new("production"))

变为

allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))

我是使用rspec-rails 2.14.0.rc1完成的。这解决了这个问题。

感谢您的评论,他们要么澄清了我的问题,要么指出了正确的方向。