Puede utilizar allow
(talón) en lugar de expect
(simulacro):
allow(object).to receive(:my_method_name) { |param1, param2| param1 }
Con los parámetros con nombre:
allow(object).to receive(:my_method_name) { |params| params[:my_named_param] }
Aquí está un ejemplo de la vida real :
Supongamos que tenemos un S3StorageService
que carga nuestros archivos a S3 usando el método upload_file
. Ese método devuelve la URL directa de S3 a nuestro archivo cargado.
def self.upload_file(file_type:, pathname:, metadata: {}) …
Queremos código auxiliar que carga por muchas razones (las pruebas fuera de línea, mejoras de rendimiento ...):
allow(S3StorageService).to receive(:upload_file) { |params| params[:pathname] }
Eso sólo stub devuelve la ruta del archivo.
¡Gracias, esto es exactamente lo que estaba buscando! Sabía que la respuesta tenía que ser algo simple :) – SirLenz0rlot
@SirLenzOrlot, ¡De nada! Gracias por la marca de verificación y feliz piratería. –
¿Se puede combinar esto con una situación en la que la secuencia desempeña un rol (por ejemplo, la primera vez que se llama, devuelve el parámetro, la próxima vez que devuelve "desconectado")? – SirLenz0rlot