『Agile Web Development with Rails 4』のP87(Iteration B2: Unit Testing of Modelsの章)で、DHHがこのようなことを言っている。
とても理にかなったプラクティスだと思った。他の方がどう考えているかを知りたくて、"valid_order_for_fred"でググってみたが、これに関する意見はほとんど見つからなかった。このやり方に共感する人が少ないか、逆に当然すぎて言及に値しないか、単にこの本があまり読まれていないか、もしくはこの章がtest/unitに関する章のため、RSpecユーザーは読み飛ばしているのかもしれない。変数名と同様に、fixture名も内容が理解できるものにする。「Fredによる有効な注文」をテストする時は、:product1や:order4よりもproduct(:valid_order_for_fred)の方が分かりやすい。
:order1ではなく:christmas_order、:customer1ではなく:fredといった命名が習慣化すれば、「:fredが:christmas_orderを注文する際、まず:invalid_credit_cardを使い、次に:valid_credit_cardを使って:aunt_mary(メアリーおばさん)に発送する」というようなストーリーを作ることができる。
※白状すると、私もこの本がScaffoldを多用している、テストがtest/unitである等の理由で今まで読んでいなかった。
一部を除きほぼ同じ内容のfixtureをYAMLで定義する場合は、defaultデータを定義して「<<:」記法で継承するとよいかもしれない。
Rails Guidesで紹介されている以下のようなERBを介入させるやり方は見た目が分かりにくいため、役割も持たないエキストラを大量に作る時等、局所的な利用にとどめた方がいいと思う。