gpt4 book ai didi

ruby - 回到 rspec-mocks 中的原始方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:23 27 4
gpt4 key购买 nike

是否可以告诉 RSpec::Mocks 为一组值 stub 一个方法,否则回退到原始方法?例如:

File.stub(:exist?).with(/txt/).and_return(true)
File.exist? 'log.txt' # returns true
File.exist? 'dev.log' # <<< need to fallback to original File.exist? here

目前,上面示例中的最后一次调用会引发 MockExpectationError,要求提供默认值。是否可以指示 rspec-mocks 回退到原始方法?

最佳答案

可以缓存原始方法,并显式调用它:

original_method = File.method(:exist?)
File.stub(:exist?).with(anything()) { |*args| original_method.call(*args) }
File.stub(:exist?).with(/txt/).and_return(true)

但是,这样太麻烦了。我希望看到一个更好的答案。

为了完整起见,这里是上面代码的概括:

def stub_with_fallback(obj, method)
original_method = obj.method(method)
obj.stub(method).with(anything()) { |*args| original_method.call(*args) }
return obj.stub(method)
end

# usage example:
stub_with_fallback(File, :exist?).with(/txt/).and_return(true)

关于ruby - 回到 rspec-mocks 中的原始方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12536256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com