なんとなく使えてしまうFabricateですが、ふとしたきっかけでちゃんと理解したいなと思ったのでまとめました。
Fabricateとは
オブジェクト生成ライブラリです。
テストで使用するためのオブジェクトを簡単に作成できます。
使い方
非常にシンプルで、モデルの属性に無難なデフォルト値を設定します。
サンプルでperson
というオブジェクトを定義しました。
Fabricator(:person) do
name "Niki"
age 23
end
生成メソッド
生成メソッドは3種類あります。よく使うのはFabricate.build
とFabricate
。
Fabriate(:person)
# newしてsaveしたものを返す
Fabricate.build(:person)
# newだけしてsaveはしない
Fabricate.attributes_for(:person)
# 属性のHashを返す
一見Fabricate.build
は必要なくない?となりますが、これは間違いです。
.build
を使うとインスタンスを保存しないので、specの処理時間の軽減につながります。
なので、.build
を使えない場合のみインスタンスを生成し、基本的には.build
を使うようにしています。
属性の値を明示する
定義したオブジェクトの属性の値を変えたい場合は以下の様にします。
person = Fabricate(:person, name: "Peru")
person.name = "Peru"
また、関連しているデータを紐づけることも簡単にできます。
例えば、book
モデルがbelong_to
でperson
モデルに紐づいている場合は以下の様にしてFabricate
で表現できます。
Fabricator(:book) do
name "キングダム"
price 1000
end
book = Fabricate.build(:book, person: Fabricate.build(:person))
これらは基本的な内容ですが、ちゃんと理解するとテストのコーディングスピードも上がると思います。他にも色々便利なメソッドがありますので暇があれば調べてみて下さい。
何かいいメソッドや書き方があれば、是非コメントください!