DrupalにおけるPHPUnitテストについて1ーとりあえず動かしてみよう編ー

  •  
 
TaKo2023年5月10日 - 15:55 に投稿

概要

本稿はLando環境に構築したDrupalにおいてPHPUnitテストを実施する方法について紹介していきます。
3~4回ほどのシリーズになる予定です。
今回は、Drupal環境でPHPUnitコマンドを実行するところまでの手順を紹介します。

PHPUnitの細かいセットアップや、カスタムモジュールでテストコードを自作する方法などは筆者もまだよく理解していません。
勉強したら次回以降紹介するつもりです。

要約

  1. Drupalで自動テストやってみたい!
  2. とにかく動かしてみよう。
  3. 動いた!←今回ここまで。

環境情報

  • Mac Apple M1:12.6.3
  • Composer:2.3.10
  • Lando:v3.11.0
  • Drupal:10

作業内容

Landoのインストールします

本題ではないので割愛します、詳しくは以下の参考資料をご覧ください。

Installation | Lando

Drupalを構築します

Druaplプロジェクトを作成します。

% composer create-project drupal/recommended-project phpunittest
% cd phpunittest

Lando用構成ファイルを作成します

% vi .lando.yml

以下の内容をコピペしてください。

name: phpunittest
recipe: drupal10
config:
  webroot: web
  php: 8.1
  via: apache:2.4
  database: mysql:5.7
services:
  appserver:
    build_as_root:
      - pecl install uploadprogress
      - docker-php-ext-enable uploadprogress
    overrides:
      environment:
        SIMPLETEST_BASE_URL: "http://phpunittest.lndo.site//"
        SIMPLETEST_DB: "mysql://drupal10:drupal10@database/drupal10"
        BROWSERTEST_OUTPUT_DIRECTORY: "/app/phpunit-results"
tooling:
  test:
    service: appserver
    cmd: "php /app/vendor/bin/phpunit --verbose -c /app/web/core/phpunit.xml.dist"

tooling > test および、overrides > environment以下の項目が今回PHPUnitを実行するための記述です。
詳細は次回以降紹介します。

PHPUnit実行結果の出力先ディレクトリを作成しておきます。

% mkdir phpunit-results

Landoコマンドで仮想環境をビルドします

% lando start

ビルドが成功すると以下のような出力結果が得られます。
*出力結果の抜粋です。

APPSERVER URLS  https://localhost:60393
                http://localhost:60394
                http://phpunittest.lndo.site/
                https://phpunittest.lndo.site/

PHPUnitを使うためdrupal/core-devをインストールしておきます。

% lando composer require --dev "drupal/core-dev:^10"

このパッケージをインストールすると、PHPUnitコマンドもインストールされます。
ls vendor/bin/で確認すると出力結果にphpunitが含まれていると思います、これがPHPUnitの実行ファイルです。

動作確認用に「Examples for Developers」モジュールと、何かと便利なDrushをインストールします。

% lando composer require drupal/examples:^4.0 drush/drush

ブラウザでhttp://phpunittest.lndo.site/にアクセスし、Drupalの初期インストールをしておきます。
*インストール手順は割愛します。
*DB情報はlando infoコマンドのservice: 'database'の項目を確認してください。

Drupalの初期インストールが完了したら、このセクションは作業完了です。

PHPUnitテストを実行してみる

PHPUnitコマンドが実行できるか確認してみましょう。

% lando test --version

以下のようなメッセージが出力されました。
PHPUnitの実行自体はできるようです!

PHPUnit 9.6.7 by Sebastian Bergmann and contributors.

次に、インストールしておいた「Examples for Developers」モジュールを有効化します。

% lando drush en examples

Unitテストをディレクトリ指定で実行してみましょう。

% lando test web/modules/contrib/examples/modules/menu_example 

以下のようなメッセージが出力されました。

PHPUnit 9.6.7 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.1.18
Configuration: /app/web/core/phpunit.xml.dist

Testing /app/web/modules/contrib/examples/modules/menu_example
.                                                                   1 / 1 (100%)

Time: 00:13.413, Memory: 8.00 MB

OK (1 test, 13 assertions)

HTML output was generated
http://phpunittest.lndo.site/sites/simpletest/browser_output/Drupal_Tests_menu_example_Functional_MenuExampleTest-36-50508486.html
http://phpunittest.lndo.site/sites/simpletest/browser_output/Drupal_Tests_menu_example_Functional_MenuExampleTest-37-50508486.html
・・・似たような内容が30行ほど続いたので中略・・・
http://phpunittest.lndo.site/sites/simpletest/browser_output/Drupal_Tests_menu_example_Functional_MenuExampleTest-69-50508486.html
http://phpunittest.lndo.site/sites/simpletest/browser_output/Drupal_Tests_menu_example_Functional_MenuExampleTest-70-50508486.html

テスト実行ができました! テスト結果も「OK」とでているので、動作も問題なさそうです!

以上で本稿の目的は達成できました!

次回以降、(勉強して)紹介する項目

  • PHPUnitコマンドの使い方、オプションなど
  • Lando構成ファイルのPHPUnitに関する記述の意味
  • テスト結果の読み方
  • テストコードの書き方
  • Unitテストだけでなく、ブラウザテストができるらしいのでそのやり方

参考

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。