kent備忘ログ

お仕事と趣味生活と

Everyday Rails - RSpecによるRailsテスト入門を読んで

Railsの課題制作が長らく続きましたが、久々に書籍によるインプットを行いました。

良かったところ

 様々なテスト技法の種類がある中で、Railsでのモデルスペックのテスト、コントローラスペックでのテストといったように、その機能だけでテストできる単体テストから解説に入り、テストの基本を教わったところで、Webアプリ全体のテストをシステムスペックを使用して正常に動作しているか確認する統合的なテストの解説に入ります。

 個別の単体テストからシステム全体のシステムテストに入る流れは、Rspecのテストの流れを掴む上で非常に分かりやすい解説の仕方だと思いました。

 また、今回の教材の作者はRubyの学習の際にはお世話になった、チェリー本でお馴染みの伊藤淳一さんの為、サンプルアプリのコード中心でその周りに解説文が明記されているような形で、チェリー本の教材同様、コードの流れを見ながら解説を学んでいく形になりました。


 また、Rspecの基本文法としてdescribe, before, context, it文といった単語が出てきますが、各単語も単に用語の解説だけで終わるのでは無く、本書の中では必要に応じて使用され、テストコードの文章をDRYの原則に則り簡潔に書くために使用されます。

解説の中でFactoryBotやCapybaraといった、実際のユーザの使用ケースに合わせたテストが出来るツールが使用されます。

FactoryBotはテストを行う際のテストデータの作成、Capybaraはシステムスペックやリクエストスペックでテストしたいユーザのアクションを定義する事ができ、実際にWebアプリ上でのユーザの動きをテストする事が出来ます。


学んだこと

第1章〜第2章
Rspecのイントロダクションとセットアップ

  • Rspecについて
  • 今回のサンプルアプリについて
  • Rspecのセットアップ

第3章〜第4章
モデルスペックと意味のあるテストデータの作成

  • FactoryBotとfixtureの違い
  • アプリケーションにFactoryBotでデータを追加

第5章〜第6章
コントローラスペックとシステムスペック

  • コントローラスペックの基本
  • ユーザ入力のテスト
  • システムスペックの基本
  • Javascriptを使った操作のテスト
  • ヘッドレスブラウザを使う
  • システムスペックとフィーチャーペックについて

第7章〜第8章
リクエストスペックとDRYなスペック

  • リクエストスペックとシステムスペックの比較
  • GET, POSTリクエストをテストする
  • コントローラスペックをリクエストスペックで置き換えする
  • let句について
  • contextの共有・失敗の集約(aggregate_failures)

第9章〜第11章
速いテストとテスト駆動開発に向けて

  • モックとスタプ
  • 不要なテストを削除する
  • テストコードからシステムの実装へ

第12章
最後のアドバイス


難しかったこと

 今回は前回の課題まで行ってきたWebアプリ制作におけるコードの実装とは違い、コード実行上のバグを未然に防ぐためのテストをアプリ上に備える事がメインでした。

 単にアプリ開発のためにコードを記述して来た経験しかない段階では実際にテストコードを動かし、テストをパスするのか、はたまたエラーが出てしまうのか不安に思いながらコードを書いてテストを実行するような感じでした。(もちろんアプリ開発の際も書いたコードの思惑通りに動作するか不安を持つこともありましたが、)

 ただ、本書の最後で伝えていたテスト駆動開発というのはテストコードから先に書き始め、その後実際のWebアプリの実装に取り掛かるといった今までとは逆の手順で、エラーを潰しながら実装出来るという点では初回に一度実装するだけではなく、アプリの改良やアップデートの際も、一度書いたテストコードがパスするように変更を加えて行けば新たなバグを出すことなく、スムーズに実装を進められるのではないかというメリットもあると思いました。