Como testar a ação do controlador que usa puntopagos e rest-client?
-
20-12-2019 - |
Pergunta
Eu tenho um controlador com uma ação POST chamada create
.Na ação de criação eu uso um jóia de puntópagos aula (PuntoPagos::Request
) que usa o jóia do cliente de descanso para fazer um POST para uma 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
Como posso, com o RSpec, fazer stub da solicitação e resposta do cliente restante para testar minha ação de criação?
Solução
Apenas esboço PuntoPagos::Request.new
e continue stubbing:
response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }
Isso é para uma solicitação bem-sucedida;faça de novo com success?
stubbed para retornar false
para testar esse ramo.
Depois de fazer isso funcionar, procure stub_chain
fazer a mesma coisa com menos digitação.
Dito isto, seria muito melhor extrair o material do PuntoPagos em uma classe separada com uma interface mais simples:
class PuntoPagosService
def self.make_request
request = PuntoPagos::Request.new
response = request.create
response.success?
end
end
Então você pode simplesmente fazer
PuntoPagosService.stub(:make_request) { true }
em seu teste.