Comment faire pour tester le contrôleur de l'action qui utilise puntopagos et de repos-client?
-
20-12-2019 - |
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?
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.