tutorial mocks before ruby parameters rspec return-value stubbing

ruby - mocks - RSpec Stubbing: Devuelve el parámetro



rspec subject (3)

Aunque mi pregunta es bastante directa, no pude encontrar una respuesta por aquí:

¿Cómo puedo marcar un método y devolver el parámetro en sí mismo (por ejemplo, en un método que realiza una operación de matriz)?

Algo como esto:

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



Nota: el método de código auxiliar ha quedado en desuso. Por favor, vea esta respuesta para la forma moderna de hacer esto.

stub! Puede aceptar un bloque. El bloque recibe los parámetros; el valor de retorno del bloque es el valor de retorno del código auxiliar:

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


Puedes usar allow (stub) en lugar de expect (simulacro):

allow(object).to receive(:my_method_name) { |param1, param2| param1 }

Con parámetros nombrados:

allow(object).to receive(:my_method_name) { |params| params[:my_named_param] }

Aquí hay 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 detener esa carga por muchas razones (pruebas fuera de línea, mejoras de rendimiento ...):

allow(S3StorageService).to receive(:upload_file) { |params| params[:pathname] }

Ese código auxiliar solo devuelve la ruta del archivo.