RSpecを書けるようになりたいけど、どのように勉強したらいいかわからないという方はいらっしゃいますか?
僕自身もつい最近まではその1人でしたが、色々と試行錯誤して初心者からは抜け出すことはできたかなと思っています。
そこで試行錯誤した経験を元にどのように学んだら効率よく身に付けることができるのか、僕がやって良かった方法をシェアします。
テストを書くときに意識すること
まずRSpecを使う前提として何をテストとして書けばよいのか理解、イメージしておく必要があります。具体的にどのような内容をテストすればよいかはここでは書きませんが、書籍などを使って「そもそもテストとは?」みたいなことを勉強しておくとRSpecについても理解しやすいです。
その上でRSpecを書く際に意識することは以下です。
- テストしたい内容がテストできていること
- 読みにくくても、遅くても、テストコードがないよりはテストコードがある方がよいです。
- 読みやすいこと
- コメントの内容がわかりやすい
- 適切な粒度でdescribeで分割する
- 適度にDRYにする
- 大きすぎるファイルは分割する
- テストの実行速度が速いこと
- インスタンス生成とDBへの保存(Factory_botのbuildとcreate)を使い分ける
基本的には適切な粒度でコメントが分かりやすければいいと思います。
分かりやすいコメントになっているかの確認は、後述するdocumentation オプションを使うと良いです。
学習法
- 伊藤淳一さんの記事「使えるRSpec入門」を読む
- Everyday Rails - RSpecによるRailsテスト入門を読む
- 伊藤淳一さんの記事「使えるRSpec入門」を参考にしながらテストを書く
Everyday Railsは翻訳者の1人が伊藤淳一さんです。伊藤淳一さん様様ですね。本当にありがとうございます。
使えるRSpecとEverydayは保管関係にあり、両方を読むことで更に理解が深まります。
慣れてきたら「使えるRSpec入門」とリファレンスを見ながら書いていけばいいと思います。
Everydayの読む順番
途中から拾い読みしても理解できるように作られているので、気になった所を読む、でも全然問題ないです。
おすすめの順番は以下です。
- まえがき
- 目次
- 最後のアドバイス
- あとがき
- 気になった章
リファレンスサイト
公式ドキュメント「Relish RSpec-Rails」
※RSpecはRuby向けのBDDツールのため、Rails以外でも使用することができます。ドキュメントはこちら(Relish)
よく使うオプション
# 失敗したテストだけ再実行
--only-failures
# ドキュメンテーションコメント(describe, context, itのコメント)をコンソールに出力する
--format documentation
「RSpec難しい!」ってなったら
僕は書き始めたころになりました。
そんな時は一旦全てコメントとして何をテストしたいのか書いてしまうのがよいです。
# Userモデルのテスト
# バリデーション
# nameは必須である
# nameは一意である
こんな感じにすると、
「nameは必須だから、nameに値がある場合と値がない場合のテストが必要だな。」
「一意のテストためには事前にデータを登録しておかないとだな。」
「そういえば、nameにmax_length付けた方がいいかな?」
と考えるためのきっかけになります。
RSpecに慣れるまでは、①テストについて考える、②それをRSpecでどのように表現するか考える、のように問題を分割して考えることをおすすめします。
まとめ
- テストについて理解する
- RSpecについて知る
- 1.2.を元に実践する
【参考】テストが動かないとき
- 必要なGemがインストールされているか確認する
- database.ymlのテストブロックにDB接続情報が書いてあるか確認する
- db:migrate --test