skimemo


skimemo - 日記/2015-08-12/Laravel+phpunitでデータベースを切り替える

_ Laravel+phpunitでデータベースを切り替える

Laravelでphpunitテストをする際、本番用DBを使用すると何かと不都合があります。Laravelでは本番用とphpunit用で接続先データベースを簡単に切り替える仕組みがありますが、意外に検索しても見つからなかったのでメモメモ。。。φ(.. )

Laravelのdbの接続情報は以下にあります。

app/config/database.php

この内容を以下にコピーします。

$ cp app/config/database.php app/config/testing/

接続先データベースを変更します。

- 			'database'  => 'db_honban',
+ 			'database'  => 'db_test',

これだけ。

テスト前にsedで書き換えようかとか思って色々調べても良い方法が出てこなかったのもそのはず、Laravelが仕組みを持ってた(^^;)。
Laravelってかゆいところに手が届く・・・。

_ DBの初期化を1回だけ行う

通常、初期化処理はTestCase.phpに書きます。
私も最初こんな風に書いてました。

public function setUp() {
	parent::setUp();
	$database = DB::getConfig('database');
	if($database != "db_test") {   // 心配性・・^^;
		die("DB is NOT ".$this->validdb."\n");
	}
	$this->initDB();
   :
}

でも、これだとテストケース毎にDB初期化が走ってしまい、遅いったらありゃしません。
個々のテストケースでDBの内容を気にしなくて良いのは良いですが、私の書いているテストケースではそんな配慮は不要でした。
stackoverflowでは、phpunit.xmlのbootstrapに書け、という記述も見かけますが、それだとLaravelのFrameworkを活用することができません。
というわけで、愚直にTestCase.php内でフラグを持たせました。

static private $initDB = false;
		:
public function setUp() {
	if( !self::$initDB ){
		$this->initDB();
		self::$initDB = true;
	}

ベタですが、まあ解りやすくて確実。

Category: [Linux] - 07:33:53



 
Last-modified: 2015-08-22 (土) 22:33:21 (2458d)