CakePHP のテストは自動的にテスト用のデータベースを使うもんだと思ってた
思ってたら、開発用の db にテストデータ大量挿入でたまげた。
で、ドキュメント読んだら、書いてあった。
database.php file の中には、$test 接続設定も含まれています。ここに設定を記入(または同じフォーマットで設定を追加)し、アプリケーションの model 内で
var $useDbConfig = 'test';
のように設定して利用してください。この方法で、任意の接続設定を追加できます。
この辺は rails のようにはいかないのねー。
てことで、できるようにしてみた。自己責任でしてみた。
まず、モデル、コントローラの雛形は
cake/app_model.php, cake/app_controller.php ですが、
これを app/ にコピーすると、そっちを使ってくれます。
これを利用して、test.php から呼び出された時は
test 用の db を使用するように変更。
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 をつかうべきですね。ソース修正しました。