Cake2のFixtureでtruncateするのを辞めさせる
CakephpのModelのテストで皆さんFixtureをお使いかと思います。importしている場合は、testメソッドが始まる前にcreate table&データ読み込みを行い、testメソッドが終わるとtruncate&drop tableするあの機能。
マスタメンテ用の簡単なCRUDテストコードを書いていて、現在の顧客データを利用して検索したいのでFixtureを使用しないでデータベースの値そのままを使おうとしていました。が、何故かTestCaseのfixtureのプロパティが設定されていないとDataSourceがdefaultを見に行きやがった。CakePHP2.0.6特有かもしれないけど。
かといって数千件あるデータをtestメソッドを叩く度にロードするのも辛すぎる。4GBのiMacではちょっと・・・。つーか商品データなんて数万件ある。既存のデータをテストのデータベースのテーブルに放り込んで、テストが終わる時はtruncateさせないようにしたかった。
なので、結局こうやった。
<?php /** * CustomerFixture * */ class CustomerFixture extends CakeTestFixture { public $name = 'Customer'; public function truncate($db) { return; } }
CakeTestFixtureにあるtruncateメソッドを空オーバーライドするだけ。
既存のアプリをcake化する場合に、意外と使えるTipsかもしれないっすね。