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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top