FactoryBotのbuildとcreateの違い

先週ブログを開始してから予想通りというか見事にブログを更新しなかったので

本日より毎日ブログを書いていきます。

 

FactoryBotについて調べると、インスタンスの作成方法が

カリキュラムではbuildだけど説明サイトではcreateになっていることが多い。

「調べたやり方が実はcreateの場合でしかできなかったらどうしよう」

と思い調べました。

 

buildの場合はメモリ上にデータを保存し、データベースに保存されない

なので基本的にはこちらを利用する。

みんながDBにアクセスすると処理が重くなるし、テストデータがDBに残ってしまう。

 

createの場合はデータベースに保存される

これはメールアドレスのように一意性があるかどうかをテストしたい時

保存したデータの個数を数える時などに使う。

 

しかし調べているうちに気になる記述を発見。

「buildはDB保存しないがアソシエーションはDB保存する」

アソシエーションを保存しない build_stubbedというメソッドも存在することを確認。

buildでググってもアソシエーションについて出てこないので 

build_stubbedを用いて検索。

 

すると

FactoryGirlのbuildとbuild_stubbedって何が違うの? - Qiita

にて、各処理にて何が作成されるのかを確認。ありがたい。

 

buildするモデルにアソシエーションでUserモデルなどが存在してる時、

buildの場合はアソシエーション先のUserのインスタンスが作成されて保存されてる

という情報。 

 

buildだとアソシエーションがあった場合にDBにアクセスしちゃうんですね。

これを防ぎたい場合にはbuild_stubbedを使う。

勉強になりました。

 

参考

qiita.com

seiya2130.hatenablog.com

qiita.comqiita.com