¿Cómo probar la acción del controlador que usa puntopagos y rest-client?
-
20-12-2019 - |
Pregunta
Tengo un controlador con una acción POST llamada create
.En la acción de crear utilizo un joya puntopagos clase (PuntoPagos::Request
) que utiliza el joya de descanso-cliente para hacer un POST a una API:
class SomeController < ApplicationController
def create
request = PuntoPagos::Request.new
response = request.create
#request.create method (another method deeper, really)
#does the POST to the API using rest-client gem.
if response.success?
#do something on success
else
#do something on error
end
end
end
¿Cómo puedo, con RSpec, bloquear la solicitud y la respuesta del cliente de descanso para probar mi acción de creación?
Solución
solo trozo PuntoPagos::Request.new
y sigue golpeando:
response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }
Eso es para una solicitud exitosa;hazlo de nuevo con success?
aplastado para regresar false
para probar esa rama.
Una vez que tengas eso funcionando, mira stub_chain
hacer lo mismo con menos escritura.
Dicho esto, sería mucho mejor extraer el material de PuntoPagos en una clase separada con una interfaz más simple:
class PuntoPagosService
def self.make_request
request = PuntoPagos::Request.new
response = request.create
response.success?
end
end
Entonces puedes simplemente hacer
PuntoPagosService.stub(:make_request) { true }
en tu prueba.