読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Cake2のFixtureでtruncateするのを辞めさせる

CakePHP

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かもしれないっすね。