Как тестировать действие контроллера, которое использует Puntopagos и REST-клиент?
-
20-12-2019 - |
Вопрос
У меня есть контроллер с постным действием с именем create
.В создании действий я использую a Puntopagos GEM класс (PuntoPagos::Request
), который использует Rest-Client GEM Чтобы сделать сообщение на 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
.
Как я могу, с rspec, заглушним запрос на клиент-клиент, чтобы проверить мою настройку?
Решение
Просто заглушить PuntoPagos::Request.new
и продолжать окуривать:
response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }
.
это для успешного запроса;Сделайте это снова с success?
, чтобы вернуть false
, чтобы проверить эту ветвь.
После того, как вы получите эту работу, посмотрите на stub_chain
, чтобы сделать то же самое с меньшими набора текста.
Сказав это, было бы намного лучше извлечь материал Puntopagos в отдельный класс с более простым интерфейсом:
class PuntoPagosService
def self.make_request
request = PuntoPagos::Request.new
response = request.create
response.success?
end
end
.
Тогда вы можете просто сделать
PuntoPagosService.stub(:make_request) { true }
.
в вашем тесте.