CakePHP3 でテストの置き場所を変更する #cakephp

概要

CakePHP3 では tests/ 配下にテストコードを書くことになっている。

何らかの原因(察して)でパスを規定から変更したい場合の修正箇所に付いてまとめる。

以降 tests/PHPUnit/ に変更すると仮定して記載する。

paths.php

TESTS が定義されているので書き換える

/*
 * Path to the tests directory.
 */
#define('TESTS', ROOT . DS . 'tests' . DS);
define('TESTS', ROOT . DS . 'tests' . DS . 'PHPUnit' . DS);

app/paths.php at master · cakephp/app · GitHub

phpunit.xml

phpunit.xml.dist などの設定ファイルを用意している場合は書き換える。

  • phpunit タグの bootstrap 属性
    • tests/PHPUnit/bootstrap.php
  • testsuite タグの directory
    • tests/PHPUnit/TestCase/
  • etc
<phpunit
    colors="true"
    processIsolation="false"
    stopOnFailure="false"
    bootstrap="tests/PHPUnit/bootstrap.php"
    >
<!-- 中略 -->
    <testsuites>
        <testsuite name="app">
            <directory>tests/PHPUnit/TestCase/</directory>
        </testsuite>
        <!-- Add plugin test suites here. -->
    </testsuites>
<!-- 中略 -->
</phpunit>

app/phpunit.xml.dist at master · cakephp/app · GitHub

tests/bootstrap.php

  • パスを修正する
#require dirname(__DIR__) . '/vendor/autoload.php';
require dirname(__DIR__) . '/../vendor/autoload.php';
#require dirname(__DIR__) . '/config/bootstrap.php';
require dirname(__DIR__) . '/../config/bootstrap.php';

※移動しているので tests/PHPUnit/bootstrap.php になっているはず

app/bootstrap.php at master · cakephp/app · GitHub

composer.json

  • autoload-dev のパスを変更
    • ここを直さないと Fixture 等が load できない
"autoload-dev": {
    "psr-4": {
        "App\\Test\\": "tests/PHPUnit/",
        "Cake\\Test\\": "vendor/cakephp/cakephp/tests/"
    }
},

app/composer.json at master · cakephp/app · GitHub

まとめ

上記の修正を入れると、別のディレクトリでも App\Test\ な namespace でテストが書ける。

しかしこんなことはやらないほうがよい。

フレームワークを使うならできるだけ変なカスマイズせずに使おう。