FactoryBot 特性内の関連オブジェクトを更新する
概要
サンプル工場
FactoryBot.define do
factory :fruit do
name { "Kiwi" }
status { "available" }
store { Store.first }
end
trait :unaccessible do
status { "unaccessible" }
store { status: "closed", hours_before_open: 2 }
end
end
特性ブロック内で、関連付けられた Store オブジェクトのプロパティを更新する方法を見つけるのに苦労しています。ドキュメントの特性セクションに例が見つかりませんでした。また、ここでSOとGoogleで検索した例は見つかりませんでした。これも可能でしょうか?
解決策
次のように、トレイト内の関連付けもオーバーライドできるはずだと思います。
FactoryBot.define do
factory :fruit do
name { "Kiwi" }
status { "available" }
store # assumes a factory :store
end
trait :unaccessible do
status { "unaccessible" }
association :store, status: "closed", hours_before_open: 2
end
end
そうすれば、作成後にストア オブジェクトを更新するために追加の DB 書き込みを行う必要がなくなります。