CakePHP3のPHPUnitをブラウザからテストする方法

CakePHP2 まで PHPUnit の Webrunner (webroot/test.php) が公式で提供されていましたが、CakePHP3 からはこれが削除されてしまいました。

CakePHP 3.x Migration Guide によると、「ユニットテストをしたい人は CLI による PHPUnit をインストールしてね。更にブラウザからテストしたい人は VisualPHPUnit (Webrunner) を別途インストールしてね。」という方針のようです。

便利だったのに残念ですね(´・_・`)

VisualPHPUnit とは

PHPUnit をウェブブラウザから実行してくれる外部ツールです。これまでの test.php で出来ていたことは大体出来ると思います。

UI はこのような感じで、なかなかお洒落。

VisualPHPUnit のスクリーンショット

インストールにあたっての前提

この記事のインストール方法は PHPUnit がインストール済みで、CLI から UnitTest が行える状態になっていることが前提です。

もしまだの場合、公式ドキュメントの Installing PHPUnit の項を参照してみてください。

CakePHP3.x に VisualPHPUnit をインストールする手順

今のところ公式 Cookbook にはインストール方法が載っていない為、独自の方法になります。

基本には VisualPHPUnit の README の説明の通りで、VisualPHPUnit を公開ディレクトリに入れて設定してアクセスするだけです。(本当は composer でインストールしたい..)

1. VisualPHPUnit をダウンロードする

VisualPHPUnit のリポジトリから Download ZIP してきます。git clone でも大丈夫だと思います。

2. webroot に VisualPHPUnit を入れる

ZIP 展開後のディレクトリを test にリネームして webroot/test に配置します。

3. キャッシュディレクトリの書き込み権限を設定する

webroot/test/app/resource/cache ディレクトリの権限を 777 にします。

chmod 777 -R webroot/test/app/resource/cache

4. 設定ファイルの設定を行う

設定ファイルの webroot/test/app/config/bootstrap.php を開いて以下の3箇所を書き換えます。

composer_vendor_path のパス

// 'composer_vendor_path' => $root . '/vendor',
'composer_vendor_path' => $root . '/../../vendor',

test_directories のパス

    'test_directories' => array(
        //'Sample Tests' => "{$root}/app/test",
        //'My Project' => '/var/www/sites/my.awesome.site.com/laravel/tests',
        'App' => "{$root}/../../tests/TestCase",
    ),

bootstraps のパス

    'bootstraps' => array(
        // '/path/to/bootstrap.php',
        //'/var/www/sites/my.awesome.site.com/laravel/bootstrap/autoload.php',
        "{$root}/../../tests/bootstrap.php",
    )

5. 必要に応じてウェブサーバの設定やその他設定を行う

Apache や nginx の追加設定が必要な場合があります。VisualPHPUnit の README を参照してみてください。

以上でインストール完了です。

使い方

ブラウザから webroot/test ディレクトリにアクセスし、左側の FILES 欄でテストしたいテストケースを選択し「Run Tests」をクリックするとテスト結果が表示されます。

URL例: http://example.com/test/

ちなみに TestCase 上で echo や var_dump() をすると結果画面上にデバッグ用として出力してくれるので便利です。

2016/02/22更新: 設定の test_directories のパス定義に /TestCase を追加しました。