CakePHP-2.xでテスト書くとき、モデルに適当なデータをロードさせるためにfixtureの$recordsを使うことが多いと思います。
でも、テストデータを全部手でハッシュに埋め込むのは大変だから、現在既にDBに突っ込んであるデータがあるなら、そこから一部を自動的に取ってきて埋め込みたい、ですよね。
と思って探していたら、やはりその機能がありました。
fixture作成の省力化 - 思考実験
http://d.hatena.ne.jp/squeera/20120725/1343228242
「-r」オプションを付けると現在DBに入ってるデータを$recordsに入れたfixtureを作ってくれます。
デフォルトでは10レコードまでなのですが「-n」オプションもつけるとレコード数を指定できます。
$ Console/cake.bat bake fixture 「モデル名」 -r -n 100
しかし、こうやって作られたfixtureデータを使ってテストを書いても、なぜか元のDBのデータを拾ってきてしまうため、なぜなんだろう??とだいぶ悩んでいました。
実は、bakeで作ったfixtureのファイルには
public $import = array('model' => 'Topic', 'records' => true);
と「'records'=>true」という指定が入っている場合があるのですが、これだと現在DBに入っているデータを参照するようになっているため、$recordsで設定したデータは使われないのです。
なので、$recordsで設定したデータを使う場合
public $import = array('model' => 'Topic');
とだけ設定するように修正する必要があります。