構築戦略

factory_botのファクトリを定義したら、組み込みの構築戦略や独自の構築戦略を使って構築できます。

こうした戦略は全て、ActiveSupport::Notificationsを使ってfactory_bot.run_factory計装に通知し、キー:name:strategy:traits:overrides:factoryを持つペイロードを渡します。

リストではないメソッド(.build.build_pair.createなど)は、必須の実引数であるファクトリ名を取ります。 また、省略できるトレイト名や、上塗りする属性のハッシュもあります。 最後にブロックを取れます。 このブロックは、生成されたオブジェクトを実引数とし、更新されたオブジェクトを返します。

リストのメソッド(.build_list.create_listなど)には2つの必須の実引数を持ちます。 ファクトリの名前と構築するインスタンスの数です。 また省略可能なトレイトと上塗りするものを取れます。 最後にブロックを取れます。 このブロックは生成されたオブジェクトとゼロ始まりの添字を実引数として取り、更新されたオブジェクトを返します。

build

FactoryBot.buildメソッドはinitialize_withにしたがってクラスのインスタンスを構築します。 既定では.newクラスメソッドを呼びます。 .build_listは複数のインスタンスを構築し、.build_pairは2つのインスタンスを構築する早道です。

initialize_withを呼んだ後、after_buildフックを呼びます。

関連はbuild構築戦略を使って構築されます。

create

FactoryBot.createメソッドはinitialize_withにしたがってクラスのインスタンスを構築し、to_createを使って永続化します。 .create_listクラスメソッドは複数のインスタンスを構築します。 また.create_pairは2つのインスタンスを構築する早道です。

initialize_withを呼んだ後、以下のフックを順番に呼びます。

  1. after_build
  2. before_create
  3. フックではないto_create
  4. after_create

関連はcreate構築戦略を使って構築されます。

to_createフックはオブジェクトの永続化方法を制御します。 オブジェクトとfactory_botの文脈を持つブロックを取り、副作用を見越して走ります。 既定では#save!を呼びます。

attributes_for

FactoryBot.attributes_forメソッドは、属性とその値を持つHashを、initialize_withを使って構築します。 attributes_for_pairメソッドとattributes_for_listメソッドは、build_pairbuild_listと似た動作です。

関連はnull構築戦略(構築されません)を使って構築されます。

フックは呼ばれません。

build_stubbed

FactoryBot.build_stubbedメソッドは、偽のActiveRecordオブジェクトを返します。 .build_stubbed_pairメソッドと.build_stubbed_listメソッドは、.build_pair.build_listと似た定義です。

initialize_withを使ってオブジェクトを構築します。 ただし、メソッドとデータを適切にスタブします。

  • idは(属性で上塗りされない限り)連番で設定されます。
  • created_atupdated_atは(属性で上塗りされない限り)現在時刻に設定されます。
  • 全てのActiveModel::Dirtyの変更の記録が消去されます。
  • persisted?は真です。
  • new_record?は偽です。
  • destroyed?は偽です。
  • 永続化メソッド(#connection#delete#save#updateなど)はRuntimeErrorを投げます。

オブジェクトを設定した後after_stubフックを呼びます。

null

FactoryBot.nullメソッドはnilを返します。 .null_pairメソッドはnilの対を与えます。 .null_listは欲しい数だけnilを与えます。 内部的に使われています。