Skip to content
これは pieceofcake2/panther のドキュメントです。pieceofcake2/cakephp 用の CakePHP 2.x プラグインです。 このフォークについて

設定 ​

End-to-End テストは Symfony Panther と同じように、PANTHER_* 環境変数と createPantherClient() の オプションで設定します。

phpunit.xml.dist ​

拡張を登録し、EndToEnd スイートを追加します (docs/examples/phpunit.xml.dist)。

xml
<phpunit bootstrap="./tests/bootstrap.php" defaultTestSuite="App">
    <extensions>
        <extension class="PieceOfCake2\Panther\ServerExtension"/>
    </extensions>
    <listeners>
        <listener class="CakeFixtureInjector" file="./vendor/pieceofcake2/cakephp/src/Cake/TestSuite/Fixture/CakeFixtureInjector.php"/>
    </listeners>
    <testsuites>
        <testsuite name="App">
            <directory>./tests/TestCase/</directory>
            <exclude>./tests/TestCase/EndToEnd/</exclude>
        </testsuite>
        <testsuite name="EndToEnd">
            <directory>./tests/TestCase/EndToEnd/</directory>
        </testsuite>
    </testsuites>
</phpunit>

pieceofcake2/app のテストは、デフォルトで APP_ENV=test で動きます (APP_ENV が設定されていなければ、 CakePHP が .env ファイルを読み込む前に tests/bootstrap.php が設定します)。そのため、テストは config/.env.test を読み込み、Web サーバーもそれを引き継いで同じファイルを 読み込みます (テスト用データベース)。

このパッケージは Panther と同じように $_SERVER から設定を読み込むので、Symfony のドキュメントと同じく 設定は <server> 要素で指定します。シェルの変数も $_SERVER に入りますが、<server> 要素はそれを 置き換えます。PANTHER_NO_HEADLESS=1 のようなマシンごとの値は、シェルか、phpunit.xml.dist を コピーした phpunit.xml に書いてください。

拡張は、実行中の最初の End-to-End テストから最後のテストまで、Web サーバーとブラウザーを動かしておきます。 拡張がない場合は、Panther と同じようにテストクラスごとに停止します。テストが createPantherClient() を 呼ぶまで何も起動しないので、App スイートの実行ではブラウザーは起動しません。

ローカルでの上書き ​

マシンごとの値は、シェルか、phpunit.xml.dist をコピーした phpunit.xml に書きます (PHPUnit は phpunit.xml を優先して読み込みます。このファイルは Git に含めないでください)。

bash
PANTHER_NO_HEADLESS=1 vendor/bin/phpunit --testsuite EndToEnd     # watch the browser
PANTHER_WEB_SERVER_PORT=9180 vendor/bin/phpunit --testsuite EndToEnd

環境変数 ​

これらは Panther の変数で、意味も Panther と同じです。シェルで設定するか、phpunit.xml.dist の <server> で設定します。

変数意味
PANTHER_WEB_SERVER_DIRドキュメントルート。デフォルトはプロジェクトの webroot/ または app/webroot/。相対パスは ./ で始める必要があります
PANTHER_WEB_SERVER_PORTWeb サーバーのポート。デフォルトは 9080
PANTHER_WEB_SERVER_ROUTERルータースクリプト。ドキュメントルートからの相対パスです。デフォルトは CakePHP のルータースクリプト。空にすると使いません
PANTHER_READINESS_PATHWeb サーバーが起動したことを確認するためにリクエストするパス。デフォルトは /
PANTHER_EXTERNAL_BASE_URIこの URL ですでに動いているアプリケーションをテストします。Web サーバーは起動しません
PANTHER_APP_ENVWeb サーバーに APP_ENV として渡されます。Web サーバーにテストとは異なる APP_ENV を渡すときだけ必要です。設定しなければ、Web サーバーはテストの APP_ENV を引き継ぎます
PANTHER_ERROR_SCREENSHOT_DIR失敗したテストのスクリーンショットを保存するディレクトリ。例: ./tmp/error-screenshots
PANTHER_ERROR_SCREENSHOT_ATTACHスクリーンショットを JUnit の添付ファイル形式で出力します
PANTHER_NO_HEADLESSブラウザーのウィンドウを表示します
PANTHER_DEVTOOLSブラウザーの DevTools を開きます
PANTHER_NO_REDUCED_MOTIONアニメーションの軽減 (reduced motion) を要求しません (Panther 2.2 以降)
PANTHER_NO_SANDBOXChrome のサンドボックスを無効にします (コンテナ、CI)
PANTHER_CHROME_ARGUMENTSChrome の追加の引数。スペースで区切ります。例: --lang=ja --window-size=1600,1200
PANTHER_CHROME_BINARY使用する Chrome のバイナリ
PANTHER_FIREFOX_ARGUMENTS、PANTHER_FIREFOX_BINARYFirefox 用の同じ設定

このパッケージの PANTHER_REPORT_* 変数は、テストの報告書を PDF で書き出します。テスト報告書 を参照してください。

createPantherClient() のオプション ​

createPantherClient(array $options = [], array $kernelOptions = [], array $managerOptions = []) は Panther のものです。

  • $options: webServerDir、hostname (デフォルトは 127.0.0.1)、port、router、readinessPath、 external_base_uri、env (Web サーバーに渡す追加の環境変数)、browser (static::CHROME、 static::FIREFOX、static::SELENIUM)、browser_arguments
  • $kernelOptions: 使われません。Symfony のカーネルはありません
  • $managerOptions: ブラウザーマネージャーのオプション。たとえば chromedriver の port (デフォルトは 9515)、capabilities、chromedriver_arguments

オプションは、実行中の最初の呼び出しでブラウザーが起動するときに適用されます。それ以降の呼び出しでは 同じブラウザーが返されます。

Web サーバー ​

createPantherClient() は、Panther の WebServerManager で PHP のビルトイン Web サーバーを起動します。 上記のオプションと変数に加えて、CakePHP 向けの次のデフォルトが使われます。

CakePHP のルータースクリプト ​

デフォルトのルータースクリプト vendor/pieceofcake2/panther/resources/router.php は、次のように動作します。

  • ドキュメントルートのファイル (CSS、JavaScript、画像) をそのまま配信します
  • それ以外のリクエストはすべて、CakePHP がベースパスの検出に使うスクリプト名とともに、 ドキュメントルートの index.php に渡します。/articles.json のようにファイルに見える URL も同様です
  • Web サーバーのキャッシュ (CACHE) を tmp/cache/panther/ に置きます。Web サーバーは テスト用データベースを default として使うので、開発用サーバーのモデルキャッシュを使ってはいけないためです

さらにカスタマイズするには、このスクリプトをアプリケーションにコピーし、PANTHER_WEB_SERVER_ROUTER に そのコピーのパスをドキュメントルートからの相対パスで設定します。例: ../tests/router.php

モダン構成とレガシー構成 ​

ドキュメントルートは、プロジェクトの webroot/ (pieceofcake2/app) です。app/webroot/ しかない場合は そちらを使います (従来の CakePHP 2 のスケルトン)。プロジェクトとは Composer のルートパッケージです。 別のディレクトリを使うには PANTHER_WEB_SERVER_DIR を設定してください。

著作権とライセンスについては LICENSE を参照してください。Cake Software Foundation とは関係ありません。