2011-05-09 10 views
18

Aunque mi pregunta es bastante sencillo, no pude encontrar una respuesta aquí:RSpec Stubbing: Devolver el parámetro

¿Cómo puedo stub un método y devolver el parámetro en sí (por ejemplo, en un método que hace un array -operación)?

Algo como esto:

interface.stub!(:get_trace).with(<whatever_here>).and_return(<whatever_here>) 

Respuesta

28

Nota: El talón de método ya no se utiliza. Consulte this answer para conocer la forma moderna de hacerlo.


stub! puede aceptar un bloque. El bloque recibe los parámetros; el valor de retorno del bloque es el valor devuelto por el talón:

class Interface 
end 

describe Interface do 
    it "should have a stub that returns its argument" do 
    interface = Interface.new 
    interface.stub!(:get_trace) do |arg| 
     arg 
    end 
    interface.get_trace(123).should eql 123 
    end 
end 
+0

¡Gracias, esto es exactamente lo que estaba buscando! Sabía que la respuesta tenía que ser algo simple :) – SirLenz0rlot

+0

@SirLenzOrlot, ¡De nada! Gracias por la marca de verificación y feliz piratería. –

+0

¿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

1

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.

Cuestiones relacionadas