モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

CakePHP2のテストでfixture利用するときの注意点

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');

とだけ設定するように修正する必要があります。