¿Es posible decirle a RSpec :: Mocks que apague un método para un conjunto de valores, De lo contrario, volver al método original.? Por ejemplo:
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
Actualmente la última llamada en el ejemplo anterior elevaría un MockExpectationError
, pidiendo proporcionar un valor por defecto. ¿Es posible dar instrucciones a rspec-mocks para que retrocedan al método original?
Respuestas
5 para la respuesta № 1Uno podría almacenar en caché el método original y llamarlo explícitamente:
original_method = File.method(:exist?)
File.stub(:exist?).with(anything()) { |*args| original_method.call(*args) }
File.stub(:exist?).with(/txt/).and_return(true)
Sin embargo, esto es demasiado engorroso. Espero ver una mejor respuesta.
En aras de la integridad, aquí hay una generalización del código anterior:
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)