Railsには本番、開発、テスト環境の3つの環境がありますがテストをする場合はテスト環境にデータを用意する必要があります。
テストデータを用意する流れ
- FactoryBotでデータを作成するための「テンプレート」を用意する。
- RspecのbeforeでFactoryBotのテンプレートを利用してテストDBにデータを挿入する。
FactoryBotのテンプレートの用意
FactoryBotのテンプレートは下記コマンドを実行することで生成することが可能です。
1 |
rails g factory_bot:model モデル名 |
Railsの「rspec」ディレクトリに「factories」ディレクトリを作成してモデルに対応する下記のテンプレートをテストデータを用意したいモデルオブジェクトごとに用意します。
1 2 3 4 5 6 7 |
FactoryBot.define do factory :モデルクラス名 do カラム1 { 'カラム内容1' } カラム2 { 'カラム内容2' } 関連するモデルクラス名(関連させたいモデルクラスがある場合) end end |
「:モデル名」で指定するモデル名から実際のモデルクラス名を自動で類推はしてくれます。
関連するモデルクラス名
もし、関連させたいモデルクラスがある場合はfactoryブロックの最終行に記述をします。なお、1:多の関係であれば多側のモデルのテンプレートのみに記述するので注意です。
RspecのbeforeでFactoryBotを用いてデータを準備する。
実際にデータを用意する際に使えるメソッドは下記です。
新規にデータを登録する。
1 |
FactoryBot.create(:FactoryBotで用意したテンプレート名) |
ただ、このままだとテンプレートに用意したデータだけがそのまま使えるだけになってしまいます。テストコード内で新しくデータを用意したい場合は下記のように指定します。
1 |
FactoryBot.create(:FactoryBotで用意したテンプレート名,カラム名1:'カラム内容1',カラム名2:'カラム内容2') |
またテーブル同士を紐付けて作成したいテーブルがある場合は下記のようにしています。
1 |
FactoryBot.create(:FactoryBotで用意したテンプレート名,紐付けたいテーブル名:紐付けたいテーブルのデータを格納したローカル変数) |
事前に紐付けたいテーブルのデータを同じくFactoryBot.createメソッドにより作成してローカル変数に格納しておき指定します。
この記事へのコメントはありません。