ESM Advent Calendar 2022 - Adventar 7日目の記事です。
こんにちはcolor_boxです。
プロジェクトで、要件一覧としてRSpecのE2Eを利用した話をします。
背景としては、中間成果物としてのドキュメントをできるだけを作らないようにしているところ、予期していないタイミングで開発運用中のシステムの要件一覧が欲しいという依頼されたときどうするか? 刻一刻と変化する要件ひとつひとつについてのドキュメント化とメンテナンスはしていません。 こういったリクエストに対して、RSpecのE2Eテストで担保されている要件をひとまず出力するという手法で対応したアプローチを紹介します。
下記のような記述をspec_helper
に追記して全てのE2Eテストを実行します。
config.before type: :feature do |feature| File.open('scenarios.txt', 'a') do |f| f << "#{feature.metadata[:example_group][:parent_example_group][:description_args].first}:#{feature.metadata[:example_group][:description_args].first}\n" end skip end
すると、プロジェクトルートのscenarios.txtに各featureテストのscenarioが記載されたファイルが出来上がります。
内容は下記のようなものとなります。
店舗担当者がログインして犬猫担当者として給餌時刻を登録する:無効な時刻を入力するとエラーが表示されて登録できないこと 店舗担当者がログインして犬猫担当者として給餌時刻を登録する:メモの最大文字数が2000文字となること 店舗管理者として対応済の里親希望者を一覧したい:未対応の里親希望者にメッセージを送信すると対応済み里親希望者の一覧に追加されること 店舗管理者として対応済の里親希望者を一覧したい:ページネーションで遷移できること
プロジェクトによりますが、シナリオ名には下記のようなものが記載されます。
- 機能の正常系を検証する手順
- 修正されたバグの発生手順
- 開発者が確認すべきと感じた手順
このように仕様や要件、バグ修正に対応したシナリオ名になります。 これらはCIで常に検証されており、最新の振る舞い一覧と言えます。
これらのようなE2Eテストからシナリオ名を抽出すると、概ね要件一覧として利用可能になります。 (もちろん、要件として利用しうるシナリオ名はわかりやすい、いわゆるいい名前である必要があります。)
E2Eテストから要件一覧を出力して役立てるという話でした。
余談ですが、 --format documentation --out などのオプションで同等のものが生成可能です。 しかし、こちらで出力したものはfeatureテストの中の各ステップ部まで出力されているため、要件リストとして使うには少々手修正が必要でした。 ですので、今回はbefore hookでファイルに追記する手法を採用しています。