CakePHP のテストは自動的にテスト用のデータベースを使うもんだと思ってた

思ってたら、開発用の db にテストデータ大量挿入でたまげた。
で、ドキュメント読んだら、書いてあった。

database.php file の中には、$test 接続設定も含まれています。ここに設定を記入(または同じフォーマットで設定を追加)し、アプリケーションの model 内で

var $useDbConfig = 'test';

のように設定して利用してください。この方法で、任意の接続設定を追加できます。


この辺は rails のようにはいかないのねー。
てことで、できるようにしてみた。自己責任でしてみた。



まず、モデル、コントローラの雛形は
cake/app_model.php, cake/app_controller.php ですが、
これを app/ にコピーすると、そっちを使ってくれます。


これを利用して、test.php から呼び出された時は
test 用の db を使用するように変更。

  1. cake/app_model.php を app/ にコピー
  2. app/app_model.php の内容を以下のように変更
class AppModel extends Model{
  function __construct($id = false, $table = null, $ds = null) {
		if (defined('CAKE_TEST_OUTPUT_HTML')) {
			$this->useDbConfig = 'test';
		}
		parent::__construct($id, $table, $ds);
	}
}

わざわざコンストラクタ作ってるのはそうしなきゃ分岐できないのですよ。
CAKE_TEST_OUTPUT_HTML は test.php でしか宣言されてないので、勝手にフラグとして使用。


これで安心して testcase の中から

$this->ObjectTest->save($data);

とかできます。

(追記)
↓ここに同じようなこと書いてありました。
http://www.1x1.jp/blog/2006/09/cakephp_db_config.html

__construct をつかうべきですね。ソース修正しました。