2009-04-21 4 views
11

웹 서비스에 연락하는 응용 프로그램을 만들고 있습니다. 서비스의 가짜 응답을 반환하는 프록시 클래스를 개발하고 싶습니다. 따라서 앱의 다른 부분을 개발/테스트하는 동안 지속적으로 요청에 부딪 힐 필요가 없습니다.Ruby에서 HTTP 응답 생성

내 응용 프로그램이 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을 사용합니다.이 프레임 워크를 통해 매우 빠르고 쉽게 뭔가를 얻을 수 있습니다. 홈페이지를 확인하십시오. 5 행의 코드로 된 전체 Hello World 앱과 모든 것을 설치하고 실행하는 두 개의 명령이 있습니다.

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 

:: 더 이상, (선택) 마지막 줄은 다음 위해 RESTClient에 스텁 할 수있는 RestClient::Response,로 래핑 HTTP :

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

http가 너무 단순하기는하지만 고맙지 만 때때로 사람들은 이상한 라이브러리에 의존합니다. 루비가 최소한의 http 응답을 생성하기 위해 내장되어 있다는 것을 잘 알고 있습니다. – Alan

+3

FYI, Net :: HTTP는 HTTP 응답 코드를 나타내는 문자열을 사용합니다. '200'응답은 ''200' '이되어야합니다. – Lolindrath

+0

HTTParty 라이브러리 https://github.com/jnunemaker/에서이를 잘 볼 수 있습니다. httparty/blob/master/spec/support/stub_response.rb – 23tux

5

내가 대신 FakeWeb의 대부분 죽은 것으로 보인다,이 게시물은 오래 알고, webmock을 시도합니다. 그것은 더 많은 기능과 활발한 것으로 보인다.