我正在从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行。
请让我知道如何纠正这个问题?
答案 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完成的。这解决了这个问题。
感谢您的评论,他们要么澄清了我的问题,要么指出了正确的方向。