はじめに
今回はRSpecによるRailsテスト入門という本を読んだので、そちらの感想を書いていこうと思います!
今回読んだ本はこちらです。
良かったところ
RailsやRubyの書籍はたくさん存在していますが、自動テスト(RSpec)についての日本語の書籍はなかなか見たことがありませんでした。よくRailsの書籍の最後の方に少しだけのっていたり、動画の中で少し触れていたりというものはありますが、ガッツリテストの本って見かけないのでテストの学習をしたい方にはとても良いと思いました。
悪かったところ
テストって結構簡単に書けると思われているのか、Railsなどの書籍に載っている部分だけの印象だったので、かなりのボリュームに圧倒しました。
そして、購入は海外のサイトなので、ドルでの支払いでした。最近は円安が続いているので、ちょっと高くつくなーって思ってしまいました。(必要なものなので、即決で買いましたが笑)
値段がその時々によってかなり異なってくること。支払い方法が限られているのでその辺も注意が必要です。
内容に関してはとても良かったので、購入して良かったと思っています。
学んだこと
3.モデルスペック
- 期待する結果は能動形で明示的に記述すること。exampleの結果がどうなるかを動詞を使って説明すること。チェックする結果はexample1つにつき1個だけにする。
- 起きてほしいことと、起きてほしくないことをテストすること。exampleを書く時は両方のパスを考え、その考えにそってテストを書くこと。
- 境界値テストをすること。もし、パスワードのバリデーションが4文字以上10文字以下なら、4文字と10文字、そして3文字と11文字もテストすることが良いケースになっている。
- 可読性を上げるためにスペックを整理すること。describeとcontextはよく似たexampleを分類してアウトライン化する。beforeブロックとafterブロックは重複を取り除く。テストの場合はDRYであることよりも読みやすいことの方が重要になる。
4.意味のあるテストデータの作成
- Factory Botというgemを使用することで、データを作成する際の柔軟性を上げることができ、リアルなシナリオをテストしやすくなる。
5.コントローラースペック
- コントローラーのテストは簡単に追加していくことができるが、すぐに大きくなって手に負えなくなることもよくある。
- コントローラーのテストは、RailsやRSpecから完全になくなっていないものの、最近では時代遅れのテストになってしまっている。その理由はコントローラーのテストに限界があるためである。
- コントローラーのテストは対象となる機能の単体テストとして最も有効活用できる時だけ使うのがよい。
6.システムスペックでUIをテストする
- システムスペックは受入テスト、統合テストとも呼ばれている。
- Webブラウザを起動し操作をシュミレートするために必要なステップが簡単にわかり、Capybaraを使ってそのステップを再現すれば済む。
7.リクエストスペックでAPIをテストする
- Railsで作成したAPIをテストすることの重要性は徐々に上がってきている。最近ではアプリケーション同士がやり取りする機会が増えてきているため。
8.スペックをDRYに保つ
- テスト内や複数のテストファイルにまたがるコードの重複を減らし、テストコードをDRYすることも重要だが必須ではない。しかし、賢く適用すれば、長い目で見た時に、保守しやすいテストになる。
9.速くテストを書き、速いテストを書く
- モック、スタブ、ファクトリを使うことで、テストする際にさまざまな方法を選択肢として選べるようになる。
10.その他のテスト
- メールやファイルアップロード、webサービス、バックグラウンドプロセスといった機能もテストすることができる。このような機能はアプリケーションの中では些細な機能かもしれないが、必要に応じてその機能をテストする時間も作る必要がある。
11.テスト駆動開発に向けて
- 新機能を実装する際にテストを書いて早期にリファクタリングすれば、時間をかなり節約できる。テスト駆動開発により、結果的に時間の節約に繋がる。
難しかったこと
RSpecの記述方法がRailsのコードの構文とは少し異なった書き方をするため、構文を覚えるのがとても大変に感じます。また、多数のgemなどが出てくるのでその使い方もマスターしていかないといけないところも難しいと感じました。テストコードが書けるようになるには時間がかかりそうだと感じます。
さいごに
今回も実際にコードを実装しながら進めていきましたが、なかなかコードの理解をするのが難しいところが多数ありました。たくさんテストを書く練習をしてマスターしていきたいと思います。