Создать ответ HTTP в Ruby - PullRequest
       13

Создать ответ HTTP в Ruby

12 голосов
/ 21 апреля 2009

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

Мое приложение ожидает ответ, сгенерированный через 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's being lied to

Спасибо.

Ответы [ 7 ]

14 голосов
/ 30 июля 2010

На самом деле нет ничего сложного в том, чтобы бросать свои собственные фальшивые ответы напрямую с помощью 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 }
8 голосов
/ 21 апреля 2009

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

5 голосов
/ 12 мая 2012

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

3 голосов
/ 21 апреля 2009

Я бы посмотрел в издевательскую библиотеку, как Мокко .

Тогда вы сможете настроить фиктивный объект, чтобы помочь в тестировании:

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

Более подробное руководство см. В блоге Timd Stephenson's RaddOnline , в котором я взял этот пример.

1 голос
/ 21 апреля 2009

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

0 голосов
/ 21 апреля 2009

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

0 голосов
/ 21 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...