バージョン
バージョン | リリース年月 | 特徴 |
---|---|---|
2.1.1 | 2012年 | ・shouldに代わる新しいexpect構文を追加した。(今でもStack OverflowとかでRspecの検索をすると古いshould構文が使われていたりする。) |
2.1.4 | ・ここまではbe_truthyの代わりにbe_trueというマッチャーが同じ意味で使われいた。 | |
3.0 | 2014年春 | ・Rspec2.14と近いシンタックスだが多少異なっている。
・be_trueが廃止された。 |
3.3 | ・「aggregate_failures(失敗の集約)」という機能が導入されて仮にあるexampleが失敗してもその後のexampleは続行することができるようになりました。 | |
3.6 | 2017年4月 | ・Rails5.1と共にリリースされた。
・Rspec3.0とほぼ互換性を保っている。 |
3.7 | 2017年4月 | ・system specがサポートされました。(Rails5.1以降のアプリなら適用可能) |
3.8 | 2018年 | |
設定ファイル(.rspec)
Rspecのインストールコマンドを実行するとRspecの設定ファイル(.rspec)が生成されます。Rspec設定には様々なオプションがあります。一度設定したら変更が不可能ということはなく後からいくらでも変更することは可能なのでテスト中でも自由にカスタマイズすると良いでしょう。
--format documentation
テスト実行中にどのスペックか通過してどのスペックが失敗したかをわかりやすく表示してくれます。また、スペックのアウトラインを美しく出力してくれます。(この出力に関しては仕様書のように使用することも可能です。)
--warnings
この設定をすると自分のアプリや使用中のGemから出力された警告を全て表示します。開発中も非推奨メソッドを使った場合の警告とかは意識する必要があるので便利です。
複数機能のテスト
Feature Spec
Rails5.1以降では非推奨になっています。System Specと同じE2Eテストになります。長らくCapybaraと連携するために使われてきましたがDBの扱い等の面で不便な点が多かったです。
現在はSystem Specで代替されています。(ただ、ほとんどフィーチャースペックとシステムスペックは同じなので知識として覚えてしまえばどちらも使えるようになります。)
他のスペックとの比較
モデルスペックやコントローラスペックに比べてセットアップや実行に時間がかかります。
Capybaraと組み合わせて使う。
フィーチャースペックのステップを定義したり、アプリケーションの実際に使われ方をシミュレートしたりできます。準備に関しては下記の記事を参考にしてみてください。
フィーチャースペックのテストファイルを作成する。
1 |
rails g rspec:feature モデル名(users等) |
System Spec
E2Eテストです。ブラウザを使ったテストを外部的に確認できます。ビューに関してはユーザーニーズにより変化しやすいパーツになるので自動化は大変になりやすいので注意です。以前は「Feature Spec」が使われていましたがRails5.1以降はこちらが推奨されています。
Feature Specと比べたメリット
- テスト終了時にDBが自動ロールバックされる。
- テスト失敗時にスクリーンショットを自動で取って表示してくれる。
- driven_byを使えばspecごとに簡単にブラウザを切り替えれる。
Request Spec
結合テストです。複数機能の内部処理の動きを確認します。
用途
E2Eをするまでもないがモデルのテストや単体テストでは確認しにくいテストをします。Web APIのテストを行う場合に活用されることが多いです。
Controller Spec(非推奨)
Rails5.0の登場により非推奨になりました。Request Specを使うことが推奨されていますし、E2Eテストをコントローラー別に整理すれば代用もできます。Railsのコントローラー単位の機能テストになります。
用途
正直あまり使いませんが、強いて言えばセッションにアクセスが可能なのでセッション情報に着目したテストをしたい場合は選択肢に入るかもしれません。ただ、セッションは変化しやすい情報ではあるので保守では注意が必要です
個別部品のテスト
Model Spec
モデル部品のテストになります。
用途
検証やデータ制御等、かなり細かい粒度でテストを記述するのでTDD開発には非常に適しています。
Routing Spec
ルーティング部品のテストになります。
用途
複雑なルーティングを設定する場合に使ったりします。
View Spec
ビュー部品のテストになります。
用途
他のテストでカバーできるので使いません。
Helper Spec
ヘルパー部品のテストになります。
用途
正直あまり使わないですがかなり凝った処理をヘルパーで実装した場合は選択肢に入るかもしれません。
Mailer Spec
メーラー部品のテストになります。
用途
メール送信機能を実装した場合は十分使う可能性があります。
Job Spec
ジョブ部品のテストになります。
用途
ジョブ機能を実装した場合は十分使う可能性があります。
この記事へのコメントはありません。