Hos*_*Aly 1 ruby rspec mocking stub
是否有可能告诉RSpec :: Mocks为一组值存根方法,否则回退到原始方法?例如:
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
Run Code Online (Sandbox Code Playgroud)
目前上面示例中的最后一个调用会引发a 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)
Run Code Online (Sandbox Code Playgroud)
但是,这太麻烦了.我希望看到更好的答案.
为了完整起见,这里是上面代码的概括:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |