我是单位测试和chefspec的新手。我试图模拟/拦截来自依赖库的配方中的函数调用
库
module Helper
def do_something_useful
return "http://example.com/file.txt"
end
end
配方
remote_file '/save/file/here' do
extend Helper
source do_something_useful
end
我尝试了以下内容:
Chefspec
allow_any_instance_of(Chef::Resource::RemoteFile).to receive(:do_something_useful).and_return('foobar')
allow_any_instance_of(Chef::Resource).to receive(:do_something_useful).and_return('foobar')
我也试过用双人模仿:
helper = double
Helper.stub(:new).and_return(helper)
allow(helper).to receive(:do_something_useful).and_return('foobar')
此操作因uninitialized constant Helper
答案 0 :(得分:1)
Sooooo这是一个有趣的案例,extend
正在覆盖模拟方法。所以我们可以使用extend
来推动事情:
before do
allow_any_instance_of(Chef::Resource::RemoteFile).to receive(:extend) do |this, m|
Module.instance_method(:extend).bind(this).call(m)
allow(this).to receive(:do_something_useful).and_return('foobar')
end
end
这就像800%的魔力,你可能不应该使用它,但它确实可以在我的小测试环境中使用。