Ruby の gem である TurnipFormatter と、そのアドオンとなる Gnawrnip の紹介です。
経緯その1 (Turnip のレポートについて)
Turnip で記述されたテストを実行すると、当然成功とか失敗の結果が表示されるのですが、
その結果がわかりづらい。デフォルトでは RSpec の標準 Formatter を使うことになるので
Steps for a feature
Evil
the monster has an alignment -> that alignment should be "Evil"
Neutral
the monster has an alignment -> that alignment should be "Neutral"
Red Dragons are deadly
there is a dragon -> there is a knight -> the dragon attacks the knight -> the knight is alive
there is a dragon -> the dragon breathes fire -> there is a knight -> the dragon attacks the knight -> the knight is dead
こういう風に表示されます。 ステップが ->
で連結され横長になった結果を見ても、
いまいちよくわからない。どのステップで失敗したのかわからない。
一応 backtrace も吐いてくれるので
# examples/steps/steps.rb:14:in `block in <top (required)>'
# ./lib/turnip/execute.rb:20:in `step'
# ./lib/turnip/rspec.rb:44:in `run_step'
# ./lib/turnip/rspec.rb:70:in `block (6 levels) in run'
# ./lib/turnip/rspec.rb:69:in `each'
# ./lib/turnip/rspec.rb:69:in `block (5 levels) in run'
# ./examples/errors.feature:8:in `it should die'
これでどうにか判断していくことになると思います。でも悲しい。
Cucumber には こんな綺麗に表示してくれるプラグイン があるのに。Turnip にも欲しい。
というわけで作ってみました。
Turnip Formatter
Turnip Formatter は RSpec の Custom Formatter で、名前の通り turnip のテストレポート専用となります。
使い方や出力されるファイルは
- https://github.com/gongo/turnip_formatter/blob/master/README.md
- https://github.com/gongo/turnip_formatter/tree/master/example/README.md
を見れば雰囲気伝わるのではないかと思います。
cucumber の report ほど綺麗にはできてないんですが、そこそこ見れるようにはなったかな、と思います。
経緯その2 (Turnip と Capybara を組み合せている場合)
わたしは仕事で turnip を使っており、特に Capybara と組み合わせての
Web アプリケーションテストを行っています。先述の Turnip Formatter のおかげで
そこそこレポートの見映えもよくなったのですが
- 「なるほど、レポートによれば
step 次へ勧む
でFailure: expected to find button "next"
と出ているな」 - 「ということは next ボタンが画面に無かったから失敗したんだな」
- 「……じゃあお前は どんな画面を見てたんだよ 」
という具合に「エラーが起こった瞬間の画面」を知りたくなりました。
一応、capybara (selenium webdriver) を手元で実行すると目の前でブラウザ起動するので、
その時は実際に目で確認できるのですが、例えば CI により深夜に1回テストが走って
そのレポートを朝出社して見てみたんだけど、結局夜中どういうことがあって落ちたのかわからない、という具合に
どうしても目で確認することが困難な状況があると思います。むしろそっちの方が多い
というわけで作ってみました。
Gnawrnip
Gnawrnip は Turnip Formatter の Addon という位置付けで、
Capybara のもつ save_screenshot
という API を使って find_button
や click_link
など
画面の検証、操作のタイミングでブラウザのスクリーンショットを記録、
その後 Turnip Formatter で作られたレポートに記録した画像を貼りつけています。
とりあえず最新版 (0.2.2) ではこんな感じでスライドショーしてくれます https://github.com/gongo/gnawrnip/pull/11#issuecomment-28494766
まとめ
まだまだどちらも修正の余地ありありだと思うんですが、それでもなんとか
開発チームのテスト・デバッグの作業効率に少しでも貢献できているんじゃないかなと信じています。
いろんな人に使ってもらって「こうした方がいい」「この情報が見たい」「デザインイケメンにしてやるよ」などなど
ありましたら issue なりなんなりに連絡をお願い致します。
一応はてなブログにもちょこちょこ書いてるので、何かの参考になれば…