Everyday Rails - RSpecによるRailsテスト入門を読んだ感想

はじめに

 RSpecの学習として「Everyday Rails - RSpecによるRailsテスト入門」を読んだので、感想をまとめました。

良かったところ

環境構築が容易

 本書ではRSpecを学ぶためのアプリケーションが用意されており、Githubからcloneするだけで、スムーズに学習に取り組むことができます。

テスト技法のベストプラクティスを学ぶことができる

 著者の考えから、どのようなテストを実施することがベストなのかを、これからテスト技法を学び始める人にもわかりやすく説明されているところが良かったです。

学んだところ

モデルに対するテストの実施方法

 本書はアプリケーションのコアとなるモデルのテスト方法の説明から始まります。RSpecの基本的な文法およびバリデーション/インスタンスメソッド/クラスメソッドとスコープのテスト方法を学びました。

テストデータの作成方法

 Factory Botを使ってテストデータを作成する方法を学びました。シーケンスを使ってユニークなデータを⽣成したり、コールバックを使ってテストデータ作成前後にアクションを追加できたりと複雑な処理もできる強みがありますが、テスト中に予期しないデー タが作成されたり、無駄にテストが遅くなったりする原因にもなり得ることから、使用する際は十分に気をつける必要もあることも理解しました。

コントローラに対するテストの実施方法

 認可されたユーザー/認可されていないユーザー/ゲストユーザーそれぞれのアクションが正常に動作するかのテスト方法について学ぶことができました。また、コントローラのテストは最近ではあまり重要視されておらず、モデルのテストか、より⾼いレベルの統合テストと置き換えることが推奨されているようです。

システムスペック(統合テスト)の実施方法

 モデルとコントローラが一つのシステムとして正常に動作するかをテストする方法について学びました。また、システムスペックにてCapybaraを使うことで、click_link、fill_in、visitといったメソッドが使用でき、ユーザーがブラウザ上で行う操作に近いテストを実施できることを学びました。

リクエストスペックの実施方法

 リクエストスペックにてAPIテストの実施方法について学びました。またコントローラスペックのアクション部分を具体的なルーティング名の指定にすることでリクエストスペックに置き換えができることを学びました。

テストコードのリファクタリング方法

 DRY原則を守るためのリファクタリング方法を学びました。また、可読性やメンテナンス性を考慮してリファクタリングをする重要性も学びました。

テストのスピードを上げる方法

 テスト実行速度を上げる方法だけでなく、テストを作成する時間も早くする方法を学びました。

テスト駆動開発について

 新機能をテストから書き始め、アプリにどのような振る舞いを持たせることでテストが通るかを考えながら実装していく流れを学ぶことができました。

難しかったところ

テスト独自の構文であるところ

 RSpecRubyRailsの構文と異なるテストコードとしての構文で記述する必要があるので、慣れが必要であると感じた。