Генерировать HTTP-ответ в Ruby

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

Мое приложение ожидает ответ, сгенерированный через Net:: HTTP.

response = Net::HTTP.get(URI.parse('http://foo.com'))

case response
when Net::HTTPOK
  # do something fun

when Net::HTTPUnauthorized
  # you get the idea

Как я могу создать объект ответа, дать ему все правильные заголовки, вернуть строку тела и т.д.

response = ProxyClass.response_object

case response
when Net::HTTPOk
  # my app doesn't know it being lied to

Спасибо.

Ответ 1

Я бы начал с FakeWeb и посмотрел, соответствует ли это вашим потребностям. Если это не так, вы можете, возможно, избавиться от всего, что вам нужно, из внутренних элементов и создать собственное решение.

Ответ 2

На самом деле не так сложно сбрасывать ваши собственные поддельные ответы напрямую с Net:: HTTP. Здесь просто 200 OK с заголовком файла cookie:

def fake_response
  net_http_resp = Net::HTTPResponse.new(1.0, 200, "OK")
  net_http_resp.add_field 'Set-Cookie', 'Monster'
  RestClient::Response.create("Body goes here", net_http_resp, nil)
end

Поскольку немногие из нас используют raw Net:: HTTP больше, последняя (последняя) последняя строка обертывает его как RestClient::Response, который затем может быть заштрихован в RestClient:

stub(RestClient).post(anything) { fake_response }

Ответ 3

Я знаю, что этот пост старый, но вместо FakeWeb, который, кажется, в значительной степени мертв, попробуйте webmock. Он, кажется, более полнофункциональный и очень активный.

Ответ 4

Я бы посмотрел на насмешливую библиотеку, такую ​​как mocha.

Затем вы сможете настроить макет для проверки:

def setup
 @http_mock = mock('Net::HTTPResponse')
 @http_mock .stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => '<title>Test</title><body>Body of the page</body>')
end

См. Tim Stepsonson RaddOnline blog для более полного руководства, где я зацепил этот пример.

Ответ 5

Для тестирования клиента веб-службы мы используем Sinatra - прекрасную небольшую веб-структуру, которая позволяет вам что-то запускать и запускать очень быстро и легко. Проверьте домашнюю страницу; он имеет полное приложение Hello World в 5 строках кода и две команды для установки и запуска всего этого.

Ответ 6

Я бы либо использовал FakeWeb, как упоминалось выше, либо попросил мою задачу проверки рейка запустить экземпляр Webrick для небольшого приложения sinatra, которое издевается над различными тестовыми ответами, которые вы надеетесь увидеть.

Ответ 7

Вы можете изучить использование Rack для этого, что должно позволить вам делать все, что вам нужно.