ruby - 使用 Mocha 去除类方法

标签 ruby rspec ruby-mocha

我想使用 rspec 和 Mocha 测试一个方法。我的目标是 stub Dir.glob 以便只返回一个文件的简单数组。该方法定义如下:

def my_method
  Dir.glob("#{upload_dir}/*.pdf").each do |file|
    ...
  end
end

和测试:

it "ignores a file of no size" do
  zero_file = File.expand_path("../fixtures/zero_size_file_12345.pdf", __FILE__)
  Dir.expects(:glob).returns([zero_file])

  ...
end

问题是方法 upload_dir 不是我想在这里测试的东西,我假设如果我停止了对 Dir.glob 的任何调用,那么 upload_dir 永远不会被调用。如果我在调用 Dir.glob 之前放入调试器并调用 Dir.glob,那么我会看到我的一个零文件数组,因此 stub 肯定有效。但是,当测试实际调用方法 Dir.glob("#{upload_dir}/*.pdf") 时,它会尝试调用 upload_dir

我正在使用 Ruby 1.9.3、rspec 2.12.0 和 mocha 0.13.0。

最佳答案

它调用 upload_dir 是因为它必须构建要传递给 glob 的字符串。你可以通过添加类似的东西来 stub 它 -

[YourClass].expects(:upload_dir).returns("foo")

然后期望您的代码将“foo/*.pdf”传递给 glob。

关于ruby - 使用 Mocha 去除类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689336/

相关文章:

ruby - 找出Ruby中歌曲的标题和歌手

ruby - 无法在 Windows xp 上的 cygwin 下为 bcrypt-ruby gem 构建 native 扩展

ruby-on-rails - rspec Controller 测试错误 undefined method for nil :NilClass

javascript - 如何允许 Chrome 以编程方式使用我的麦克风?

ruby - 如何使用 mocha stub 对象上的所有内容

ruby - 使用纯 Ruby 脚本将进度上传到 S3

ruby - 如何在 Ruby 中关闭 $stdout 和 $stderr

unit-testing - 我正在尝试运行 puppet-rspec,但出现了一个不太具体的错误

ruby-on-rails - 使用 Capybara 测试仅限 SSL 的 URL 的最佳方法是什么?

ruby 。在 RSpec 中模拟