在Ruby中生成HTTP响应

Bry*_* M. 13 ruby web-services http

我正在开发一个可以访问Web服务的应用程序.我想开发一个代理类,它返回来自服务的虚假响应,所以在我开发/测试应用程序的其他部分时,我不必经常遇到请求.

我的应用程序期望通过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
Run Code Online (Sandbox Code Playgroud)

我怎样才能制作一个响应对象,给它所有正确的标题,返回一个正文字符串等?

response = ProxyClass.response_object

case response
when Net::HTTPOk
  # my app doesn't know it's being lied to
Run Code Online (Sandbox Code Playgroud)

谢谢.

jpa*_*kal 14

使用Net :: HTTP直接推送自己的假响应实际上并不难.这是一个带有cookie标题的简单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
Run Code Online (Sandbox Code Playgroud)

由于我们很少有人使用原始Net :: HTTP,(可选)最后一行将其包装为a RestClient::Response,然后可以将其存入RestClient:

stub(RestClient).post(anything) { fake_response }
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,Net :: HTTP使用字符串来表示HTTP响应代码,"200"响应应为"200" (4认同)

gtd*_*gtd 8

我将从FakeWeb开始,看看它是否符合您的需求.如果不是,你可以从内部开始直接消除你需要的东西并创建你自己的解决方案.


Dav*_*est 5

我知道这篇文章很老了,但是看起来很大程度上死了的FakeWeb,试试webmock.它看起来更全功能,非常活跃.