2009-04-21 2 views
11

Я работаю над приложением, которое обращается к веб-службе. Я хотел бы разработать прокси-класс, который возвращает фальшивый ответ от службы, поэтому мне не нужно постоянно бить его с помощью запросов, пока я разрабатываю/проверяю другие части приложения.Создать ответ 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's being lied to 

Спасибо.

ответ

8

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

2

Я бы посмотрел на насмешливую библиотеку, такую ​​как 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 Stephenson's RaddOnline blog для более полного учебника, где я зацепил этот пример.

0

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

1

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

0

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

15

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

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 

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

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

Спасибо, иногда люди полагаются на странные библиотеки, хотя http должен быть настолько проклятым. Хорошо знать, что Ruby встроен для генерации минимального ответа на HTTP. – Alan

+3

FYI, Net :: HTTP использует строки для представления кодов ответа HTTP, ответ '200' должен быть' 200'' – Lolindrath

+0

, вы могли бы хорошо использовать это в библиотеке HTTParty https://github.com/jnunemaker/ HTTParty/блобо/ведущий/спецификация/поддержка/stub_response.rb – 23tux

5

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

Смежные вопросы