はじめに
Everyday Rails - RSpecによるRailsテスト入門を読了したので、良かった部分や学んだ部分についてまとめようと思います
良かったところ
- 章の組み立てがわかりやすい
- テストの内容・説明→まとめ→章末問題という流れ
- 最初、基礎的なテストの仕方を説明して、後の章で今回言うとFactoryBotを使って説明していて理解しやすい
- Rails5ではなくRails7で書かれていること
- Ruby on Railsの教材の中でRails7の内容を書かれているものはあまり多くない印象です
- 今後バージョンが上がった際も対応していただけそうな雰囲気を文章から感じました
学んだところ
RSpec のセットアップ
-
Gemfile
-
group :development, :test do gem 'rspec-rails' #追加 end
に記述して
bundle install
実行 -
テストデータベース
config/database.ymlを開き、どのデータベースにアクセスできるか確認
SQLiteなら
-
test: <<: *default database: db/test.sqlite3
MySQL や PostgreSQLなら
-
test: <<: *default database: projects_test
こうなっています
そしてbin/rails db:create:all
を実行
すでに作成済みなら、rails タスクはテストデータベースがすでにあることを教えてくれる
RSpecをインストール
bin/rails generate rspec:install
意味のあるテストデータの作成
Factory Bot をインストールする
group :development, :test do
gem "rspec-rails"
gem "factory_bot_rails"
# その他の gem は省略 ...
end
gemをインストールして例えば、Userモデルのファクトリを追加するときには
bin/rails g factory_bot:model user
このコマンドを実行すると、spec ディレクトリ内に factories という新しいディレクトリが
作られます。その中には users.rb という名前のファイルが作られます。
FactoryBot.define do
factory :user do
sequence(:user_name) { |n| "test_user#{n}" }
sequence(:email) { |n| "test-#{n}@exmaple.com" }
password { 'password' }
password_confirmation { 'password' }
phone { '09012345678' }
birthdate { '2024-07-03' }
end
end
そしてこのように記述してテスト内で
FactoryBot.create(:user)
と書くだけで、
簡単に新しいユーザーの作成ができます
ですが、FactoryBot.create(:user)を繰り返し使用すると
emailなどが同じになってしまいバリデーションエラーを起こします
なのでシーケンスを使ってユニークバリデーションを持つデータを生成して防ぎます
sequence(:user_name) { |n| "test_user#{n}" }
sequence(:email) { |n| "test-#{n}@exmaple.com" }
とすることでユニークなメールアドレスを生成することができます
Factory Botはごちゃごちゃしがちなスペックを綺麗にできる点が非常に便利に感じました
システムスペックで UI をテストする
- 統合テストの一つとしてシステムスペックがある
- 特にUIのテストとして有効
Capybara をインストールする
group :test do
gem 'capybara'
# その他の gem は省略 ...
end
リクエストスペックで API をテストする
- リクエストスペックとシステムスペックの比較
- リクエストスペックは高速で軽量なテストに適しており、主にサーバーサイドの動作やAPIのテストに使用されます。
- システムスペックは現実的なユーザー体験をテストするのに適しており、フロントエンドの動作を含む複雑な操作をテストするのに使用されます。
スペックを DRY に保つ
let で遅延読み込みする
- let は呼ばれたときに初めてデータを読み込む、遅延読み込みを実現するメソッド
- beforeブロックの外部で呼ばれるため、セットアップに必要なテストの構造を減らすこともできる
テスト駆動開発に向けて
- 最初にテストを書く(Red)
- テストがパスするように最小限のコードを実装する(Green)
- 必要に応じてコードをリファクタリングする(Refactor)
RSpec は失敗した内容をわかりやすく表示してくれるため、テストは失敗すべきであるとも言えます。
難しかったこと
- モックとスタブに関しての部分の理解
- 実務でのテスト駆動開発をどう進めていくのか
さいごに
RSpecの知識を深めたい人には、まずはこれを読めば良いと進めたいぐらい本書は丁寧で読みやすかったです
まだまだ理解できていない部分もあるのでテストする際、都度読み返そうと思います。