FactoryBotセットアップ、設定

factory_bot 6.5.0、factory_bot_rails 6.4.4で確認。

定義方法はFactoryBotの定義チートシートを参照。
利用方法はFactoryBotの利用方法チートシートを参照。

gemの導入

group :development, :test do
  gem 'factory_bot_rails'
end

groupにdevelopmentが含まれているが、FactoryBot公式のConfigurationにそう書かれている。またFactoryBot公式のGeneratorsに関する説明にも書かれているが、developmentに含めることで bin/rails g modelなどの実行時に対応するFactoryBotの定義ファイルも生成するようになる。

FactoryBotは基本的にtest環境でしか使われないが、development環境にも入っていると rails console などで利用することができる。

# bin/rails console
app(dev)> FactoryBot.build(:user)
=>
#<User:0x0000ffff9687f898
 id: nil,
 name: "hoge",
 created_at: nil,
 updated_at: nil>

rakeタスクなどからも利用できるので、開発環境用のテストデータを作るというような用途で利用できる。

定義ファイル

FactoryBotの定義チートシート#定義ファイル を参照。

設定

以下のファイルを作成する。

# spec/support/factory_bot.rb
RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

spec/rails_helper.rbファイルに以下の行を追加する。

# require 'rspec/rails' の行よりも後に追加すること
require 'support/factory_bot'

あるいは、パフォーマンス上の懸念がないのであれば以下の行のコメントアウトを外す。

# Rails.root.glob('spec/support/**/*.rb').sort_by(&:to_s).each { |f| require f }

この設定がなくとも、FactoryBot.build(:user)のようにレシーバを指定すれば使えはする。しかし、rubocop-factory_botを入れているのであれば、FactoryBot/SyntaxMethodsで警告されるため、設定しておくべきである。