前回の記事に関連して、DrupalでPHPUnitを実行するためのセットアップ方法をまとめます。
DrupalはComposerでインストールする派だ、デモサイトは持っている、今すぐテストコードを動かすぞ!という方向けです。
1. ComposerでPHPUnitをインストール
composer require --dev drupal/core-dev
composer require --dev phpspec/prophecy-phpunit:^2 // 実行時に入れてねって警告が出るので一緒にインストール
2. phpunit.xml.distをcoreからコピー
web/core/phpunit.xml.dist
をcomposer.jsonを同じ階層にコピーします。
web/
はdocroot/
などの場合もあります。ApacheやNginxでドキュメントルートとして設定するディレクトリです。
3. phpunit.xml.dist を2箇所変更
bootstrapとパス変更とSIMPLETEST_DBをセットします。
<!-- ファイル上にある「bootstrap」の指定を読み込みできるパスに変更します。
tests/bootstrap.php
↓
web/core/tests/bootstrap.php にしました。
-->
<phpunit bootstrap="web/core/tests/bootstrap.php" colors="true"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutChangesToGlobalState="true"
failOnWarning="true"
printerClass="\Drupal\Tests\Listeners\HtmlOutputPrinter"
cacheResult="false">
<--
SIMPLETEST_DB の値をセットします。コメントのExampleを参考に。
Durpalが動かしているDBとは別にテスト用DBを用意してください。
Composerマスターのあなたの環境はDockerとかVagrantだと思うのでさくっとテスト用DB用意できるはず
-->
<!-- Example SIMPLETEST_DB value: mysql://username:password@localhost/databasename#table_prefix -->
<env name="SIMPLETEST_DB" value="mysql://testdb_user:testdb_user@testdb/testdb"/>
4. 実行
vendor/bin/phpunit [テストコードのディレクトリ]
で実行できます。
helpモジュールのテストを実行するとこんな感じでした。実行時間は環境のスペック次第です。
vendor/bin/phpunit web/core/modules/help
PHPUnit 9.5.10 by Sebastian Bergmann and contributors.
Testing /app/web/core/modules/help
....... 7 / 7 (100%)
Time: 00:48.674, Memory: 12.00 MB
OK (7 tests, 743 assertions)
実行するだけならこの手順で実行可能です。
phpunit.xml の設定で対象範囲を指定できたりするはずなので、それはPHPUnitの公式ドキュメントをご確認ください。
以上です!