5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

CakePHP2のテストで、$defaultのDBを見に行ってしまう話し


CakePHP2でテストするときに、/app/Config/database.phpの$testではなくて$defaultで指定したDBを見に行ってしまいます。こちらの対処方法のメモ。

テーブルにtext型の項目があると、memoryではなくてMyISAMでテストのテーブルを自動的に作りに行きます。この辺りが関係しているかもしれません。こちらはbakeすると、Fixtureの$fieldsの中にtableParametersに設定されています。

テストの途中でexit()して上げると、$testのほうのDBにテストのためのテーブルをFixtureからcreate tableしてくれていることを確認できます。しかし、テストケースでは、$defaultのほうのDBを見に行きます。

CakePHP2のCookbookに書いているように、Fixtureに

public $useDbConfig = 'test';

と書いてもダメでした。

public $import = array('table' => 'articles', 'connection' => 'test');

のようにしてもダメ。

結局は、

class ArticleTestCase extends CakeTestCase {
    public $fixtures = array('app.Article');
    public function setUp() {
        parent::setUp();
        $this->Article = ClassRegistry::init('Article');
        $this->Article->useDbConfig = 'test';
    }

のように無理矢理モデルの$userDbConfigにtestをして対応しました。

もっと良い方法があるのでしょうね。これだと、joinされたFixtureのテーブルデータだと見つからないのてテストできないとか問題が残ります。

マニュアルに書いていないことは何とか対応しなければいけないのは大変です。

著:山田祥寛
¥3,366 (2024/11/21 16:43時点 | Amazon調べ)
著:松浦 健一郎, 著:司 ゆき
¥2,574 (2024/11/21 16:43時点 | Amazon調べ)
著:谷藤賢一, 著:徳丸浩
¥2,750 (2024/11/21 16:43時点 | Amazon調べ)

続きはこちらから

“CakePHP2のテストで、$defaultのDBを見に行ってしまう話し” への1件のコメント