Написание макета RSpec

#ruby-on-rails #ruby #rspec

#ruby-on-rails #ruby #rspec

Вопрос:

В моем проекте Ruby on rails есть следующий код для получения HTTP-ответа от API, отличного от rails

приложение / модель /rest_api.rb

 require "uri"
require "net/https"
require "net/http"
require "active_support"
class RestApi
  # the URL for the Twitter Trends endpoint
  @url = 'http://api.twitter.com/1/trends.json'

  def self.sampleRes
    uri =  URI.parse( @url)
    request = Net::HTTP::Get.new(uri.request_uri)
    response = http.request(request)
    return response
  end
end
  

Я только начал изучать Ruby on Rails и RSPEC. Может кто-нибудь, пожалуйста, помочь, как я могу написать RSpec для HTTP-запроса, фактически не отправляя запрос на фактический URL API (нужен макет)

Ответ №1:

Вы можете макетировать часть запроса и строить ожидания относительно того, что должно быть вызвано и т.д.

 mock_req = double("http request")
mock_req.should_receive(:request)
Net::HTTP::Get.should_receive(:new).and_return(mock_req)
  

Ваш код также можно упростить до:

 open('http://api.twitter.com/1/trends.json').read
  

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

Комментарии:

1. Привет, спасибо за быстрый ответ. Не могли бы вы, пожалуйста, помочь мне в написании тестовых примеров в ruby test: unit для той же обработки REST API, что приведена выше в примере.