ダミーWebサーバを作るライブラリ、wwをリリースしました

近頃はWebAPIを使ったアプリケーションを作ることが増えていると思いますが、自動化テストからのWebAPIへのアクセスはどうやってますか?
私は、自分でstubしたりFakeWeb(レシピ先輩に教わった!!)を使ったりしてたんですが、イマイチしっくりこない部分がありました。で、Sinatraなぞで作ってたんですが、それをgemにまとめましたので、よろしければご利用ください。

概要

ww(Double Web)はいわゆるDouble(mock, stub, spyなど)の機能を備えたダミーWebサーバを簡単に作るためのフレームワーク(笑)です。現状では、以下のようなことが出来ます。

  • 他のAPIサーバを使う場合などに、簡単にダミーサーバを作る
  • そのダミーサーバは自動化テストないから起動停止できる
  • Stub(固定のレスポンスを返すようなアクション)を定義できる。みんな大好きSinatraで書けます。
  • そのリクエストをためておいて、テスト中から検証できます。このパラメータできたこと、とか。(Spy)
  • Mockも定義できる。予定されたメソッドがテスト中で呼ばれない場合、例外を発生させられる。

使い方

大きく2通りの使い方が出来ます。

一つは自動化テスト中から起動停止をする方法。
実際に通して動かしているテストが http://github.com/moro/ww/blob/master/spec/ww/server_integration_spec.rb にあるのでご覧ください。
たとえば、複雑なパラメータを外部APIに投げるような場合に、どんなリクエストが飛んだかを検証できるようになります。

もう一つは、あらかじめ別サーバとして起動しておく方法です。この場合は、そのダミーサーバの/spyにアクセスすると、Spyで溜めていたアクションへのリクエストを目視で確認できます。
検証用途としてはあまり役立ちませんが、書いては消し、で作っている間に目視確認したい場合や、お客様へデモするときの表示用には役立つんじゃないでしょうか。
出力イメージは http://github.com/moro/ww/raw/master/example/spy_eye_output.html にあります(GitHubがtext/plainで返しますので、保存したあとにブラウザで開いてみてください)。

ということで、現状はようやく上記二つの用途で使えるようになりました。試しに、いま参画しているプロジェクトのテストコードやデモ用ダミーサーバを、wwを使うように書き換えたところ、ちゃんと動いています。

バグ報告やご要望があればTwitterあたりで@moroで話しかけてください。