ruby-on-rails - rspec stub 给出错误数量的参数错误

标签 ruby-on-rails rspec

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

相关文章:

javascript - Rails 4 - Bootstrap Slider - 动态填充数据滴答的工具提示?

ruby-on-rails - Paperclip 会自动清理文件名吗?

ruby-on-rails - Rails 嵌套模型形式 : validate presence of foreign key unless user creates new record

ruby-on-rails - Michael Hartl 教程第 11 章中的 "undefined method ` find_by '"

ruby - RSpec 只能在我的 Lib 目录的根目录中看到类

ruby-on-rails - 如何为模型/ View / Controller 以外的文件编写/运行规范

ruby-on-rails - 未能安装 bson_ext

ruby-on-rails - Authlogic:为#<User: 获取未定义的方法 `password':

ruby-on-rails - 带有 I18n 的邮件程序的 Rspec

ruby-on-rails - VCR:创建第二个磁带时为 "There is currently no cassette in use."