#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, что приведена выше в примере.