🚴‍♀️

【FactoryBot】バリデーションをスキップする方法

2022/12/25に公開

システムスペックを書いていると、ここはバリデーションをかけたくない!という時はたまにあります。テストに限った話ではないですが、Railsではvalidate: falseというオプションが使えるようです。

バリデーションのスキップ

実は、saveにvalidate: falseを引数として与えると、saveのバリデーションをスキップすることが可能です。この手法は十分注意して使う必要があります。

このオプションをFactryBotで使えばバリデーションをスキップできそうです。

FactoryBot.define do
  to_create { |instance| instance.save(validate: false) }
  
  factory :user do
    name { 'Alice' }
  end
end

もしくは、traitを作れば任意のタイミングでスキップできるようにできます。

FactoryBot.define do
  factory :user do
    name { 'Alice' }

    trait :skip_validate do
      to_create { |instance| instance.save(validate: false) }
    end
  end
end

ちなみにto_createをオーバーライドする方法はReadmeにありました。
Custom Methods to Persist Objects

参考

【RSpec】FactoryBotのモデル作成でバリデーションをスキップする方法

Discussion