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
6.0 以降で factory の定義だけを書きます。
FactoryBot.define do factory :task do end end
これだけで enum の traits が使えるようになります。
task = FactoryBot.build(:task, :started) task.status #=> "started"
詳しくは GETTING_STARTED とPRをご覧ください。
おわりに
とても便利な機能なのでまだ FactoryBot 6.0 未満を使っている方はバージョンアップすることをオススメします。