Ответ 1
Я бы начал с FakeWeb и посмотрел, соответствует ли это вашим потребностям. Если это не так, вы можете, возможно, избавиться от всего, что вам нужно, из внутренних элементов и создать собственное решение.
Я работаю над приложением, которое обращается к веб-службе. Я хотел бы разработать прокси-класс, который возвращает фальшивый ответ от службы, поэтому мне не нужно постоянно бить его с помощью запросов, пока я разрабатываю/тестирую другие части приложения.
Мое приложение ожидает ответ, сгенерированный через 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
Спасибо.
Я бы начал с FakeWeb и посмотрел, соответствует ли это вашим потребностям. Если это не так, вы можете, возможно, избавиться от всего, что вам нужно, из внутренних элементов и создать собственное решение.
На самом деле не так сложно сбрасывать ваши собственные поддельные ответы напрямую с 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 }
Я знаю, что этот пост старый, но вместо FakeWeb, который, кажется, в значительной степени мертв, попробуйте webmock. Он, кажется, более полнофункциональный и очень активный.
Я бы посмотрел на насмешливую библиотеку, такую как 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 для более полного руководства, где я зацепил этот пример.
Для тестирования клиента веб-службы мы используем Sinatra - прекрасную небольшую веб-структуру, которая позволяет вам что-то запускать и запускать очень быстро и легко. Проверьте домашнюю страницу; он имеет полное приложение Hello World в 5 строках кода и две команды для установки и запуска всего этого.
Я бы либо использовал FakeWeb, как упоминалось выше, либо попросил мою задачу проверки рейка запустить экземпляр Webrick для небольшого приложения sinatra, которое издевается над различными тестовыми ответами, которые вы надеетесь увидеть.
Вы можете изучить использование Rack для этого, что должно позволить вам делать все, что вам нужно.