2014年2月1日土曜日

[ruby] Sinatra + Cucumber + Capybara が良さそうな感じ

さて、最近新しいプロジェクトで Web インターフェースを作っていくにあたり、どの言語でどのフレームワーク使うかについて検討している。

やっぱ言語は ruby だな。コード書いてて一番楽しそうだし、読みやすいからメンテしやすそうだし。となるとフレームワークをどうするか。

で、ruby の軽量フレームワーク Sinatra について調べてた。Rails でももちろんいいし、実際僕は Rails 使ったことないので興味もあるんだけど、関わってる製品の事情で軽量なフレームワークの方が良さそうなんで Sinatra が第一候補になった。

そしてせっかくフレームワーク使うなら、テストが効率よくできる仕組みがすごく重要。やっぱりテスト駆動で開発したいもんで。初めてテスト駆動を実際に仕事で使った時は衝撃だったなぁ。それ以来テスト駆動開発のファンになった。

さて、Sinatra の公式ページを読むと、テストについては基本的には Rack ベースらしい 。Rack は Webアプリケーションインターフェースって言葉だけ聞くとなんじゃそりゃって感じですが、要するに「こういうリクエストが来たらこうレスポンスを返すっていう決まりを書く時の形式を共通化するもの」って理解でいいかな。

で、実際テストを書く時には
・テストケースを書く → Cucumber を使う
・テストの中身を書く → Capybara を使う

という感じに組み合わせれば良さそうな感じ。

Cucumber を使うとテストケースを自然言語に近い形式で書ける。設定すれば日本語も使えるらしい。まあ実際に日本語を使ってテストケースを書くかどうかは別としても、直感的に見て分かりやすいテストケースを書けるのは、テスト駆動開発を行う上でも助かりそうだ。

Capybara は Web アプリケーションの実際のテストの中身を描くのに便利な機能を提供してくれる。例えばレスポンス中の HTML のある要素に特定の文字列が入っていることを確認したい、なんてときに自力でレスポンスボディから要素を抽出するのは面倒だが、それを XPath や CSS セレクタの形式で抽出できるようにするメソッドを提供してくれたりする。同じようなもので Webrat というのもあるらしいが、Capybara のほうが後発らしく使いやすいみたい。

あと、Capybara はテストを Webkit 経由で実行できるドライバが用意されていて、なんと Javascript のテストも一緒にできるらしい。すごい。以前 Javascript のテストは QUnit でやってて分離してたから効率は良くなかったけど、これできたらテスト効率もアップしそうだな。

参考サイト:
Testing Sinatra with Rack::Test
jnicklas/capybara · GitHub
ASCIIcasts - “Episode 257 - request specとCapybara”
あーありがち - 実はCapybaraってよく分からないんです
第21回 Railsアプリの受け入れテストをCucumberで書こう:Ruby Freaks Lounge|gihyo.jp … 技術評論社

※この記事について指摘・意見・提案・感想などありましたら下のコメント欄にどうそ。

0 件のコメント:

コメントを投稿