Techioz Blog

FactoryBot 工場のブロックの目的は何ですか?

概要

FactoryBot 工場における一時的な実行の目的は何ですか?

以下のような言葉で始まる工場をたくさん見てきました。

factory :car do
  owner nil
  other_attribute nil
end
...

このブログでいくつかの情報を見つけました。 FactoryGirl を使用して Rails で複雑なデータセットを簡単に作成する

しかし、私はまだこれをどのように、そしてなぜ行うのか完全には理解していません。私の FactoryBot の経験は最小限です。

FactoryBot の使用経験がある方は洞察を共有していただけますか?

解決策

一時属性を使用すると、モデルの属性ではないデータを渡すことができます。

次の属性を持つ car というモデルがあるとします。

工場で車種を作成するときに、車の名前を大文字にしたいと考えています。私たちにできることは次のとおりです。

factory :car do
  transient do
    # capitalize is not an attribute of the car
    capitalize  false
  end

  name           { "Jacky" }
  purchase_price { 1000 }
  model          { "Honda" }
 
  after(:create) do |car, evaluator|
    car.name.upcase! if evaluator.capitalize
  end
end

したがって、自動車工場を作成するときは常に名前を大文字にする必要があります。できるよ

car = FactoryGirl.create(:car, capitalize: true)
car.name
# => "JACKY"