コガミツlog

福岡在住エンジニアのブログ

factory-botのtransient に悩ませる

「テストコードがうまく書けない」ということで実装の相談を受けて私自身も色々調べたらfactory-botのtransient の使い方が原因で意図したテストデータを作れていなかったみたいでした。

私自身もtransientは初めてでしたので調査したことメモっておきます。

公式docに書いてあるのでこれ見てください。

factory_bot/GETTING_STARTED.md at main · thoughtbot/factory_bot · GitHub

factory :user do
  transient do
    rockstar { true }
  end

  name { "John Doe#{" - Rockstar" if rockstar}" }
end

create(:user).name
#=> "John Doe - ROCKSTAR"

create(:user, rockstar: false).name
#=> "John Doe"
  • factoryの定義内で使える
  • buildされたオブジェクトには値はセットされない
  • 他の属性からアクセスできる

とのこと。

馴染みない英語が出てきたら意味と発音も調べるようにしているのですが、一時的なという意味。

transientの意味・使い方・読み方|英辞郎 on the WEB