La esencia de mi problema es el siguiente: -Cómo devolver un valor dinámico de un simulacro de Mocha en Ruby
Estoy escribiendo un simulacro de Mocha en Ruby para el método representado como "post_to_embassy" a continuación. No es realmente nuestra preocupación, con el propósito de describir el problema, lo que hace el método real. Pero necesito el simulacro para devolver un valor dinámico. El siguiente procedimiento '& prc' se está ejecutando correctamente en lugar del método real. Pero el método "con" en Mocha solo permite la devolución de valores booleanos. Por lo tanto, el siguiente código muestra cero. Necesito que muestre el valor que se pasa a través de orderInfoXml. ¿Alguien sabe de un método alternativo que puedo usar?
require 'rubygems'
require 'mocha'
include Mocha::API
class EmbassyInterface
def post_to_embassy(xml)
puts "This is from the original class:-"
puts xml
return xml
end
end
orderInfoXml = "I am THE XML"
mock = EmbassyInterface.new
prc = Proc.new do |orderXml|
puts "This is from the mocked proc:-"
puts orderXml
orderXml
end
mock.stubs(:post_to_embassy).with(&prc)
mock_result = mock.post_to_embassy(orderInfoXml)
p mock_result
#p prc.call("asd")
de salida: -
This is from the mocked proc:-
I am THE XML
nil
Creo que esta respuesta es un poco engañoso. Aunque es correcto sugerir que puede usar Expectation # with para especificar diferentes valores de retorno para diferentes valores de parámetros, el uso de Procs no es necesario al especificar los valores de retorno. –
Es cierto, el Proc no es necesario. Pude haber especificado los valores de retorno como cadenas, directamente. Usé un Proc en mi código de ejemplo para reflejar más de cerca la pregunta. – metavida