我想使用 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/