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

2でテストするときに、/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のテーブルデータだと見つからないのてテストできないとか問題が残ります。

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

“CakePHP2のテストで、$defaultのDBを見に行ってしまう。” への1件の返信

コメントは受け付けていません。