cakePHP(v3.x)、自動テストを導入する。

CakePHPはPHPUnitによる自動テストが導入できます。

PHPUnitは以下のコマンドでインストールできます。

composer require --dev phpunit/phpunit:"^5.7|^6.0"

ここで

Do not run Composer as root/super user! See https://getcomposer.org/root for details

などと警告が出ますがrootでComposerを実行していないので無視して大丈夫です。

インストールが完了したら、「config/app.php」のtestのデータベースの設定を任意に変更し、本番環境と同様なテスト用のテーブルを用意します。

**
         * The test connection is used during the test suite.
         */
        'test' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost', // 自分の環境に合わせて任意に変更
            //'port' => 'non_standard_port_number',
            'username' => 'my_app', // 自分の環境に合わせて任意に変更
            'password' => 'secret', // 自分の環境に合わせて任意に変更
            'database' => 'test_myapp', // 自分の環境に合わせて任意に変更、このデータベースに本番環境と同一のテーブルを用意する。
            //'encoding' => 'utf8mb4', // 自分の環境に合わせて任意に変更
            'timezone' => 'UTC', // 自分の環境に合わせて任意に変更
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
            'log' => false,
            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
            'url' => env('DATABASE_TEST_URL', null),
        ],

設定が完了したら以下のコマンドで任意のテストケースが作成できます。今回の場合はコントローラーのテストケースです。

bin/cake bake test Controller YourController

ここで作ったテストケースは以下のコマンドで実行できます。

vendor/bin/phpunit tests/TestCase/Controller/YourControllerTest