現実のプロジェクトでのCucumberの始め方

セッションが終わったあと、Ask the speakerに来てくださった方((お名前を聞いておけばよかった!!)と少しお話しました。Cukeに興味が湧いたので使い始めてみたい、というとても嬉しいことをおっしゃってくださいました。
そこで話した、「すでに始まっているプロジェクトでのCuke導入法」を簡単にご紹介します。今回の私の話や、その他いろんなコトで興味を持った方の参考になれば嬉しく思います。
新規でも途中でも、プロジェクトに導入するときのポイントは、「ムリをしない」「一歩ずつ」ですが、特に開発が始まったあとから入れる場合は、簡単なところからやっていくとよいでしょう。具体的には、

1. (ログインなどもいらない)GET系の画面(index or show)

まずは、アプリケーションにCukeを組み込んで、一週回すことに集中します。script/generate cucumberをしたら、「アクセスするのが簡単な画面」の代表的な要素を検証するのがよいでしょう。使うステップは、最低限のこのくらいでもよいと思います。

もし    "<url>"ページにアクセスする
ならば  "こんにちは世界"と表示されていること

ここでの目的は、

  • Cukeを無事にRailsに組み込めたのを確認すること、
  • 日本語で書いて、それが動く楽しさを体験すること、

の2点です。

2. scaffold的な、単表の作成・更新画面(new→create or edit→update)

次は、POSTしてみます。出来るだけシンプルな画面/機能を選んで、データを変更するようなシナリオを書いてみます。たとえば以下のようなシナリオになります。

前提   "Todo一覧"ページを表示している
もし   "新規Todo追加"リンクをクリックする
かつ   "Todo"に"講演資料作る"と入力する
かつ   "〆切り"に日付として"2010-02-19"と入力する
かつ   "追加"ボタンをクリックする

ならば "Todo一覧"ページを表示していること
かつ   "講演資料作る"と表示されていること

先ほどに比べると、だいぶ長くなっていますが、雰囲気は伝わると思います。
目的は以下の三点あたりです。

  • 一歩進んだ長いシナリオもちゃんと動くという自信を得る
  • リンククリック、フォーム入力他Cukeのバンドル語彙に慣れる
  • シナリオアウトライン(表形式のアレ)やバリデーションのテストなど、バリエイションを増やせそうなテストのベースを作る

ある程度動いたら、それを基本として、いろいろ試してみるとよいと思います。

3. いま作っているアプリのいま作っている機能

2番まで出来たら、それを足場としていじったりしながら、いよいよ本当に役立つシナリオを書きます。
いま作っている機能、言い換えるとその時点で一番関心のある機能のシナリオを書きながら、いろいろ試行錯誤するとよいと思います。
今日の講演でも話しましたが、正規表現でマッチする日本語を一皮むくと、そこではみんな大好きRubyが使えます。

ここから先はアプリごと、プロジェクトごとにいろいろ変わってくると思いますが、慣れるまではやはり参照系->書き込み/更新系の順番で書くといろいろとやりやすいことが多いように思います。
最初はベタな書き方でもいいと思いますので、Webrat提供語彙をそのまま使いつつ、チームのみんなが慣れてきたら高レベルなstepに洗練していくとよいのではないでしょうか。

こんな感じで使えますので、ぜひ試してみてくださいませ。enjoy testing.