メインコンテンツに移動

Drupal9 PHPUnitを4ステップでセットアップ

2021-12-06

前回の記事に関連して、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の公式ドキュメントをご確認ください。

以上です!