複数コールバック

同じファクトリに複数の種類のコールバックを定義することもできます。

factory :user do
  after(:build)  { |user| do_something_to(user) }
  after(:create) { |user| do_something_else_to(user) }
end

ファクトリは同じ種類のコールバックをいくらでも定義することもできます。 こうしたコールバックは指定された順番に実行されます。

factory :user do
  after(:create) { this_runs_first }
  after(:create) { then_this }
end

createを呼ぶとafter_buildコールバックとafter_createコールバックの両方ともが呼ばれます。

また標準的な属性と同様に、子のファクトリは親ファクトリからコールバックを受け継ぎます(また定義もできます)。

複数のコールバックはブロックを走らせて代入できます。 (全ての戦略を通じて共有されるコールバックはないため)同じコードを様々な戦略で構築するときに有用です。

factory :user do
  callback(:after_stub, :before_create) { do_something }
  after(:stub, :create) { do_something_else }
  before(:create, :custom) { do_a_third_thing }
end