🚴♀️
【FactoryBot】バリデーションをスキップする方法
システムスペックを書いていると、ここはバリデーションをかけたくない!という時はたまにあります。テストに限った話ではないですが、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
Discussion