我正在从 Rails 3.2.19 升级到 Rails 4.1.5。我正在使用 rspec-rails 2.14.0.rc1。
使用 rails 4.1.5 我的所有测试都通过了,除了少数使用 stub 的测试。失败的是以下形式:
ENV.stub(:[]).with("ADWORDS_RUN").and_return("Yes")
Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
Kernel.stub(:rand).and_return(2)
每个都返回 ArgumentError:参数数量错误(1 代表 2+)
。所有人都在 rails 3.2.19 中通过。我试过回到 rspec-rails 2.8.1,但同样的错误。也rails 4.0,但错误仍然存在。最后一个错误(stubbing :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 行。
请告诉我如何解决这个问题?
最佳答案
我没能找到这个问题的原因,但我确实找到了解决方法。它是将所有 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 完成了这项工作。这解决了问题。
感谢您的评论,他们要么澄清了我的问题,要么为我指明了正确的方向。
关于ruby-on-rails - rspec stub 给出错误数量的参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26082894/