Uncategorized

FixtureIDは自分で書いてはいけない

ぼくが利用しているフィヨルドブートキャンプで指摘された内容です。

ユーザーフォロー機能に関するテストのプラクティスでのことです。Relatiship(関連)のFixtureIDを自作していたら、「RailsではFixtureのIDを自分で書いちゃダメだよー」という指摘を受けました。

解決策はRelationshipのターゲットラベルを指定して、ActiveRecordの自動生成機能を使うことでした。

FixtureIDを自分で書いてはいけない理由

なんで自分でFixtureIDを作ってはいけないというと、「特定のIDやデータの大小にテストが左右されてしまうため」だそうです。

正直いまの自分にはピンときません。。
おそらくチーム開発に入ったら理解できるんだと思います。

どうやって書けばいいの

ユーザーフォローに関するrelationshipのfixtureの例を下にのせます。

これでもテストパスするけどバグの元になりやすいらしい(そもそも何も書かなくても Railsが気をきかしてくれるので問題ない)。

自分でFixtureIDを書かないなら、どうやってテストするんだ??
となって調べてみたら下のような解説を見つけました。

Active Record は、フィクスチャのモデル・クラスを反映し、すべての belongs_to 関連を見つけ、FK のターゲット ID (monkey_id: 1) ではなく、関連のターゲット・ラベル (monkey: george) を指定することができます。

引用元:ActiveRecord::FixtureSet

では今回のrelationshipのモデルを見てみる

関連のターゲットラベルは,following: user, follower: userっぽい。
なので下のように書き直してみる

テストとおったー!