Как тестировать действие контроллера, которое использует Puntopagos и REST-клиент?

StackOverflow https://stackoverflow.com//questions/25006798

Вопрос

У меня есть контроллер с постным действием с именем 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 }
.

в вашем тесте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top