jac*_*bot 2 ruby rspec mocha.js
我有一个方法,我想用rspec和Mocha测试.我的目标是Dir.glob为了只返回一个文件的简单数组.该方法定义如下:
def my_method
Dir.glob("#{upload_dir}/*.pdf").each do |file|
...
end
end
Run Code Online (Sandbox Code Playgroud)
而且测试:
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
Run Code Online (Sandbox Code Playgroud)
问题是这个方法upload_dir不是我想在这里测试的,我假设如果我删除了任何调用Dir.glob那么upload_dir就永远不会被调用.如果我在调用Dir.glob和调用之前放入一个调试器Dir.glob,那么我看到我的数组是一个零文件,因此存根肯定是有效的.但是,当测试实际调用该方法时Dir.glob("#{upload_dir}/*.pdf"),它会尝试调用upload_dir.
我使用Ruby 1.9.3,rspec 2.12.0和mocha 0.13.0.
它调用upload_dir,因为它必须构建要传递给glob的字符串.你可以通过添加类似的东西来存根 -
[YourClass] .expects(:upload_dir).returns( "foo" 的)
然后期望你的代码将"foo/*.pdf"传递给glob.