woshidan's blog

そんなことよりコードにダイブ。

FactoryGirlのinheritanceやtransientの確認をする

他にもいろいろ復習したり、しなかったりする。

 

直近で言うと、もすこしデータベースとlinuxの勉強をしたい感じあります。

今回はすこし面倒くさかったので、コードは


factory_girl/GETTING_STARTED.md at master · thoughtbot/factory_girl · GitHub


からの引用もあります。

正直、今回の内容は詳しく調べてみてから、全部覚えていて使い分ける、というより、
どれか1つをプロジェクトで揃えておいたほうがやりやすそうだなぁ、と思いました、まる。

 

inheritance

他の属性は共有しているけれど、特定の属性だけ追加、ないし、上書きしたい場合に使う。
継承元のfactoryブロックの中にfactoryブロックを書いて、追記したい属性をそのブロック内に書く。

こういう書き方も出来る。

上の書き方のほうがシンプルなんだけど、1つのfactory(大体追加するのは新しいテストしたいデータ仕様が出たとき)に1つのブロックが対応している方がテストコード追うときは楽な気もする。

 

trait

日本語で言うと、特徴.
.crateや.buildの引数にさらにシンボル(だけ)を追加すると、そのシンボルを引数に取るtraitのブロックの中の設定が.createや.buildで生成されたインスタンスに適用される。
transientもそうなんだけど同質の部分を振り分ける、という印象。

inheritanceみたいな使い方もできる。


transient

日本語で言うと一時滞在者くらい.
場合分けによって特定の属性を替えたfactoryを作りたいときに使う。
transientブロックをfactory内に書いておいてその中に管理者フラグなどを作っておいて、
管理者フラグがONならadmin trueにする、というように書ける。


inheritanceを使うとfactory名が長くなりそう。
それぞれ便利だけどあまり混ぜると訳分からなくなりそうだな……

alias

同じデータを別の名前で呼びたいときはaliasを使う。
(ユーザ同士をフォロー者、被フォロー者とする、みたいな)

dependent attributes

メールアドレスのサンプルをユーザ名から作りたいな、という場合に使える。