Как я могу проверить (с помощью RSpec), что HTTP-запрос отправляется в Rails (как часть модульного теста)?

У меня есть этот код в классе шлюза, который делает запросы к внутреннему API компании. Как мне провести модульное тестирование?

class XGateway < BaseGateway
  self.target_url = ENV["X_URL"]

  def activate(serial_number:, comment: nil)
    expecting 204 do
      connection.put do |req|
        req.url "/api/v1/hw/#{serial_number}/activate"
        req.params = { comment: comment }
      end
    end
  end

  def deactivate(serial_number:, comment: nil)
    expecting 204 do
      connection.put do |req|
        req.url "/api/v1/hw/#{serial_number}/deactivate"
        req.params = { comment: comment }
      end
    end
  end
end

connection - это объект запроса Фарадея, а expecting - это метод, позволяющий методу узнать, какой статус он ожидает для действительных ответов. Оба они определены в BaseGateway, от которого наследуется XGateway.

Что мне здесь нужно протестировать (в рамках модульного теста?)

Насколько я понимаю, для каждого метода:

  • Убедитесь, что HTTP-запрос отправляется с правильными параметрами.
  • Проверить правильность поведения при выполнении ожидания (ответ имеет код состояния 204)
  • Проверьте правильность поведения, когда ожидание не выполнено (код состояния ответа отличается от 204)

Но как я могу проверить, что HTTP-запрос был отправлен?


person Flip    schedule 19.04.2017    source источник
comment
Вы можете использовать WebMock   -  person Babur Ussenakunov    schedule 19.04.2017


Ответы (1)


Обычно я использую VCR для тестирования запросов и ответов. С его помощью вы можете записать запрос и ответ, сделанный в вашем коде. Основная цель видеомагнитофона - ускорить выполнение вашего набора тестов и сделать его более устойчивым к изменениям в сторонних системах.

В вашем случае вы можете настроить модульные тесты, в которых вы передаете параметры методам activate и deactivate и проверяете ответы, которые вы ожидаете от входных данных.

Вы можете (хотя я не могу рекомендовать это) проанализировать кассету видеомагнитофона на предмет той части, где находится URL-адрес запроса, и сопоставить его с вашими ожиданиями.

person basiszwo    schedule 19.04.2017