Question

J'ai un contrôleur avec un POST d'action nommé create.Dans l'action de création, j'utilise une puntopagos gem classe (PuntoPagos::Request) qui utilise le reste-client gem pour faire un POST à un 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

Comment puis-je, avec RSpec, de la le reste-la demande du client et la réponse afin de tester mon action de création?

Était-ce utile?

La solution

Juste stub PuntoPagos::Request.new et de garder sur stubbing:

response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }

C'est un succès de la demande;le faire à nouveau avec success? écrasé de retour false pour tester cette branche.

Une fois que vous avez obtenu ce travail, s'occuper de stub_chain pour faire la même chose avec moins de frappe.

Cela dit, il serait beaucoup mieux d'extraire les PuntoPagos des choses dans une classe séparée avec une interface plus simple:

class PuntoPagosService
  def self.make_request
    request = PuntoPagos::Request.new
    response = request.create
    response.success?
  end
end

Ensuite, il vous suffit de faire

PuntoPagosService.stub(:make_request) { true }

dans votre test.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top