FactoryBot 6.0 から enum の traits が自動生成されるようになった

はじめに

2020 年 6 月にリリースされていた FactoryBot バージョン 6.0.0 から ActiveModel の enum の列挙子ごとに traits が自動で作られるようになっていました。これについて技術記事があまりなかったので書いてみることにしました。

例えば以下のような status という enum のカラムをもつ Task モデルがあるとします。

# app/models/task.rb

class Task < ActiveRecord::Base
  enum status: {queued: 0, started: 1, finished: 2}
end

v6.0以前では traits を書く必要があった

6.0 以前では factory の定義に自分で traits を書く必要があるので面倒です。

# spec/factories/tasks.rb

FactoryBot.define do
  factory :task do
    trait :queued do
      status { :queued }
    end

    trait :started do
      status { :started }
    end

    trait :finished do
      status { :finished }
    end
  end
end

v6.0 以降では traits を書く必要がなくなった

Added: automatic definition of traits for Active Record enum attributes, enabled by default

github.com

6.0 以降で factory の定義だけを書きます。

FactoryBot.define do
  factory :task do
  end
end

これだけで enum の traits が使えるようになります。

task = FactoryBot.build(:task, :started)
task.status
#=> "started"

詳しくは GETTING_STARTEDPRをご覧ください。

おわりに

とても便利な機能なのでまだ FactoryBot 6.0 未満を使っている方はバージョンアップすることをオススメします。