Gemfileにgemを追加する。
ターミナルでbundle
コマンドを実行する。
config/application.rbのfixtures: false
, g.factory_bot false
の記述を削除しておく。
ターミナルで下記コマンドを実行するとファクトリファイルが自動生成される。
(user
の部分は作成したいファクトリのモデル名に置き換える)
自動生成されたファイル spec/factories/users.rb にデータを入力する。
データを囲んでいる中括弧({ })はRubyのブロックです。FactoryBot 4.11から記法が変わり、データを囲む中括弧が必須になりました。ですので、この中括弧を忘れないようにしてください。
FactoryBot.build(:user)
の形で使用する。ここでは FactoryBot.build を使ったので、新しいユーザーはインスタンス化されるだけで、保存はされません。
FactoryBot.build(:user, first_name: nil)
の形で属性をオーバーライドさせる。FactoryBot.create
の形でデータベースに保存する。このexampleではテストオブジェクトの email 属性が重複しないことを確認しています。これを検証するためには二つ目(訳注: 原文は「二つ目」になっていますが、「一つ目」が正だと思われます)の User がデータベースに保存されている必要があります。
emailなどテストデータ毎に異なる値を設定したい時、シーケンスを使ってユニークなデータを生成することが出来る。
spec/factories/users.rb
3つのファクトリデータを以下のように作成する。
spec/factories/notes.rb
spec/factories/projects.rb
spec/factories/users.rb
テストでnoteを生成すると、project, userも同時に生成される。
spec/models/note_spec.rb
入れ子構造にして継承させる。
spec/factories/projects.rb
以下のように通常の方法で使用できる。
spec/factories/projects.rb
トレイトを使用するようにスペックを修正する。
spec/models/project_spec.rb
コールバックを使うと、ファクトリがオブジェクトをcreateする前、もしくはcreateした後に何かしら追加のアクションを実行できます。また、createされたときだけでなく、buildされたり、stubされたりしたときも同じように使えます。
Factory Botにはこうした処理を簡単に行うための create_list メソッドが用意されています。コールバックを利用して、新しいオブジェクトが作成されたら自動的に複数のメモを作成する処理を追加してみましょう。
spec/factories/projects.rb
トレイトを使用するようにスペックを作成する。
rails_helper.rbに設定を追加する。
FactoryBot.
を省略し、create(:user)
, build(:user)
の形で作成出来る。
emailなどの異なるデータを作成したい時、テキストではシーケンスを使用していたが、Fakerを使用することも出来る。
【Ruby on Rails】FactoryBotとFakerについてまとめ
初期データ投入するseeds.rbでもFakerを使用することが出来る。
【Rails】seeds.rbとFakerを使ってダミーデータ作ってみた
おすすめのgem
モデルのカラム情報をFactoryBot内に記載してくれる。
シードデータを扱いやすくするSeed Fu
存在しているが変更したいレコードだけ更新したり、ファイル単位で実行できたり、簡単に書けるようなシンタックスシュガーがあったりと便利
環境毎のデータ管理もできる
sequenceのちょっと違う書き方
sequenceの第二引数でString#nextを末尾の文字に実行される
gem 'simplecov', require: false
gem 'rails_best_practices'
gem "sentry-rails"
gem "sentry-ruby"
gem 'meta-tags’