factory_botでvalidationをskipしたいときの方法

こんにちは!kossyです!



今回はテストデータを生成するGemであるfactory_botを使う際に、validationをskipする方法について、
ブログに残してみたいと思います。



環境

Ruby 2.6.6
Rails 6.0.3
macOS Catalina



to_createメソッドを使う

答えを先に言ってしまうと、下記のようにfactoriesファイルに定義してしまえばOKです。(Fakerを使っています)

FactoryBot.define d
  factory :admin do
    name { Faker::Name.name }
    email { Faker::Internet.email }
    password { Faker::Internet.password }

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

呼び出す際は以下のように記述します。

create(:admin, :skip_validation)

traitは処理をグループ化して、createの第二引数以降にシンボルで呼び出すことで、traitで定義した属性を適用することができます。
今回のケースの場合、to_createメソッドにブロック引数を渡し、そのブロックの中でインスタンスのsaveメソッドを呼び出す際にvalidationを適用しないようにしています。


大いに参考にさせていただいたサイト

この場を借りて御礼を申し上げます。
FactoryGirl でバリデーションもコールバックも無効にしたい - Qiita