maeshimaの日記

メモ書きです

Chapter 21 Cucumber with Rails

メモ。どうやらRspec本が14版になってChapterがずれたみたい。12版だとChapter 20。

序文

一度通ったシナリオはregression testsとして使えるというような文章があった。そもそもregression test ってなんだろ。→調べた。

プログラムを変更した際に、その変更によって予想外の影響が現れていないかどうか確認するテスト。

リグレッションテストとは【regression test】(回帰テスト) - 意味/解説/説明/定義 : IT用語辞典

21.1 Step Definition Styles

Railsアプリで step definition を作る時、通常3つの step definition のスタイルを扱うことになる。

Automated Browser
Webrat と Selenium を使って実際のブラウザでアクセスするスタイル。実行に時間かかるしメンテも大変。
Simulated Browser
Webratを使ってアクセスするスタイル。JavaScriptのテストが出来ない。
Direct Model Access
Modelに直接アクセス。routing, controller, view をバイパスするので早いけど統合的ではない。

テストの速さと疎結合度合いは反比例。上記の三つの中でのおすすめは

  • When と Then ではSimulated Browser
  • Given に Direct Model Access。でもいくつか例外あり。ログイン時にセッションが必要なときなどにはSimulated Browserを使う。
  • JavaScriptAjaxのテストが必要なら When と Then に Automated Browser を使う。

21.2 Direct Model Access

Cucumber で Model のシナリオを書く例。書き方はこれまで勉強した内容と一緒で特に目新しい部分は無し。でもこれってRSpecでいいんじゃないのかなという疑問→解説見たら、この例は「簡単のために」Cucumberのみでやっているみたいで、実際はバランスをみてRSpecとCucumberを両方使うようになるみたい。

これまでは、viewを担当してなかったり、viewの仕様が決まっていない状態では Cucumber は使わないのかなと思ってた。けど違った。Cucumberは(エンジニア以外の)人に見せるためのテスト全般に使える。