skip_createとto_create、そしてinitialize_with

skip_createメソッドとto_createメソッドとinitialize_withメソッドは、factory_botによる構築戦略とのやり取りの仕方を制御します。

これらのメソッドはfactory定義ブロック内で呼べます。 作用はそのファクトリに留まります。 FactoryBot.define内にすると大域的な変更として作用します。

initialize_with

initialize_withメソッドはブロックを取り、ファクトリのクラスのインスタンスを返します。 attributesメソッドを使うことができます。 このメソッドはオブジェクトの全てのフィールドと値からなるハッシュです。

既定の定義は以下です。

initialize_with { new }

to_create

to_createメソッドはFactoryBot.create戦略を制御します。 このメソッドはinitialize_withで構築されたオブジェクトとfactory_botの文脈を取るブロックを取ります。 文脈にはtransientブロックからの追加のデータがあります。

既定の定義は以下です。

to_create { |obj, context| obj.save! }

skip_createメソッドはto_createを何もしないように変える早道です。 これによりcreate戦略をbuildの同意語として使えます。 ただしcreateフックは追加で掛かっています。