2009-04-21 11 views
11

私はWebサービスに到達するアプリケーションを開発中です。私は、サービスの偽の応答を返すプロキシクラスを開発したいので、私はアプリケーションの他の部分を開発/テストしている間は、要求に常にぶつかる必要はありません。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

Webサービスクライアントをテストする場合は、素早く簡単に何かを起動して実行できる素敵な軽量WebフレームワークSinatraを使用します。ホームページをチェックしてください。それは5行のコードで全Hello Worldアプリケーションと、すべてをインストールして実行する2つのコマンドを持っています。

0

これでRackを使用すると、必要な作業をすべて行えます。

15

実際には、Net :: HTTPを使用して自分の偽の応答を直接表示することは難しくありません。ここでCookieヘッダーでOKの簡単な200です:私たちのいくつかはもう生のネット:: HTTPを使用しているので

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、としてそれをラップします:

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/blob/master/spec/support/stub_response.rb – 23tux

5

私が代わりにFakeWebの大部分が死んでいるように思われ、このポストは古いですけど、webmockを試してみてください。それはよりフル機能を備え、非常にアクティブなようです。

関連する問題