PHPUnit は、PHP コードをテストするためにコアチームが選んだ公式のテストフレームワークです。
WordPress のテストは、SVN 経由で利用可能なコア開発リポジトリにあります:
svn co https://develop.svn.wordpress.org/trunk/ wordpress-develop
cd wordpress-develop
または Git で:
git clone git://develop.git.wordpress.org/ wordpress-develop
cd wordpress-develop
wp-tests-config-sample.php
を wp-tests-config.php
にコピーし、データベースの認証情報を入力します。別のデータベースを使用してください。
PHPUnit テストを実行するには、いくつかの方法があります。どのワークフローを選択するかはあなた次第です。
ワークフローによってはより多くの設定が必要なものがあります。迷った場合は、ほとんどのセットアップが自動的に行われる Docker ワークフローから始めることをおすすめします。
- Docker コンテナ
- Composer
- PHPUnit PHAR ファイルを Composer で実行する
- Composer を使わずに PHPUnit PHAR ファイルを実行する
Docker 以外のワークフローでは、PHP と MySQL/MariaDB が利用可能であることを確認する必要があります。
PHP とデータベースをローカルにセットアップする方法については、ローカルサーバーのインストールについてのハンドブックページを参照してください。
完全なテストスイートを実行するには、PHPUnit と WordPress のテストスイートの両方で特定の PHP 拡張モジュールを有効にする必要があることに注意してください。
有効にしておくべき代表的な拡張機能は次の通りです: gd
、mysql[i]
、zip
、exif
、intl
、mbstring
、xml
、xsl
オプションとして、PHP の外部拡張である Xdebug、MemCache および Imagick もインストールして有効にしておく必要があります。
ステップ1: Dockerをインストールし、起動する
ステップ2: NPMをインストールする
ステップ3: WordPress をインストールしたディレクトリのルートディレクトリにいることを確認する
ステップ4: コマンドラインから次のコマンドを実行する:
npm install
npm run build:dev
npm run env:start
npm run env:install
docker コンテナをセットアップしてプロビジョニングされたら、コマンドラインからテストを実行できます: npm run test:php
。
追加のコマンドライン引数を PHPUnit に渡す場合は、NPM コマンドと追加の PHPUnit 引数の間に二重ダッシュ区切り文字を追加して、NPM がそれらを PHPUnit に渡すようにする必要があります。
ステップ1: Composer をインストールする
ステップ2: WordPress をインストールしたディレクトリのルートディレクトリにいることを確認する
ステップ3: コマンドラインから次のコマンドを実行する: composer update -W
Composer の依存関係がインストールされたら、コマンドラインから次のコマンドを使用してテストを実行できます: vendor/bin/phpunit
ステップ1: PHPUnit Phar をインストールする
PHP のバージョンに適した PHAR をインストールします。インストール手順は、PHPUnit のマニュアルまたは PHPUnit の Web サイト を参照してください。
ステップ2: Composer をインストールする
ステップ3: WordPress をインストールしたディレクトリのルートディレクトリにいることを確認する
ステップ4: Composer の依存関係をインストールする
コマンドラインから次のコマンドを実行する: composer update -W
PHPUnit PHAR と Composer の依存関係がインストールされたら、コマンドラインから次のコマンドを使用してテストを実行できます: [path/to/]phpunit
この方法は、PHPUnit と PHPUnit ポリフィルをグローバルにインストールし、複数のディレクトリでテストを実行する場合に最適です。
ステップ1: PHPUnit PHAR をインストールする
PHP のバージョンに適した PHAR をインストールします。インストール手順は、PHPUnit のマニュアルまたは PHPUnit の Web サイト を参照してください。
ステップ2: PHPUnit ポリフィルをインストールする
通常は、GitHub リポジトリのクローンを作成します:
git clone git@github.com:Yoast/PHPUnit-Polyfills.git [target/path]
ステップ3: ポリフィルへのパスを定義する
ポリフィルをインストールしたら、定数 WP_TESTS_PHPUNIT_POLYFILLS_PATH
でパスを定義して、Polyfills がどこにあるかを WordPress のテスト用ブートストラップに伝えます。
この定数は、phpunit.xml[.dist]
ファイルで次のように宣言します:
<php>
<const name="WP_TESTS_PHPUNIT_POLYFILLS_PATH" value="path/to/yoast/phpunit-polyfills"/>
</php>
または、wp-tests-config.php
ファイルで PHP 定数として宣言できます。
PHPUnit PHAR とポリフィルをインストールしたら、コマンドラインから次のコマンドを使用してテストを実行できます: [path/to/]phpunit
備考: このワークフローを使用する場合は、PHPUnit ポリフィルのローカルクローンを常に最新の状態にしておくようにしましょう。
備考:
好みのワークフローを選び、上記の手順に従ってマシンをセットアップしたら、上記の好みのワークフローに記載されているコマンドでテストを実行できます。
以下のすべての例では phpunit
を使用します。これらの例をローカルで実行する場合は、このコマンドをワークフロー固有のコマンドに置き換えてください。
おおよそ以下のような出力が表示されるはずです:
........................................................... 59 / 12524 ( 0%)
........................................................... 118 / 12524 ( 0%)
........................................................... 177 / 12524 ( 1%)
........................................................... 236 / 12524 ( 1%)
........................................................... 295 / 12524 ( 2%)
.......SS.................................................. 354 / 12524 ( 2%)
...
........................................................... 12449 / 12524 ( 99%)
........................................................... 12508 / 12524 ( 99%)
................ 12524 / 12524 (100%)
Time: 01:46.744, Memory: 235.10 MB
OK, but incomplete or skipped tests!
Tests: 12524, Assertions: 57712, Skipped: 56.
各記号の意味は次の通りです:
.
– それぞれのドットは合格した一つの「テスト」を意味します。S
はテストがスキップされたことを意味します。これは通常、テストがマルチサイトや特定の PHP 拡張モジュールを必要とするなど、特定の設定でのみ有効であることを意味します。F
はテストが失敗したことを意味します。何がどこで失敗したのか、より詳細な出力が表示されます。E
は、PHP のエラー、警告、通知によってテストが失敗したことを意味します。R
はテストが「危険」と判定されたことを意味します。何が危険と判定されるかは、phpunit.xml.dist
ファイルの設定に大きく依存します。これは、特に遅いテストやアサーションを実行しないテストなどです。I
は、テストが不完全である、たとえばまだ実装されていないことを意味します。
備考: Windows で、コマンドラインの画面出力に奇妙なコードが表示されていますか ? --colors=never
で実行してみてください。
個別のクラス を実行するには、--filter
を使用してクラス名を指定します:
phpunit --filter Tests_Formatting_wpParseStr
PHPUnit の --filter
オプションは非常に柔軟で、さまざまなオプションをサポートしています。PHPUnit のマニュアルを参照ください。
テストのグループ を実行するには、コードのコメントで定義されている @group
を使用します:
phpunit --group dependencies
phpunit --group themes
グループを組み合わせることもできます (プラットフォームによっては、グループを二重引用符で囲む必要がある場合があります)。
phpunit --group shortcode,17657,6562,14050
...
OK (229 tests, 417 assertions)
備考:
多くのテストには @ticket
という注釈がついており、WordPress の Trac チケットの結果であることを示しています。
@ticket
注釈は @group
注釈のエイリアスであるため、Trac チケット番号を「group」として渡すことで、個々の Trac チケットにリンクされたテストを実行できます。
すべてのグループを表示するには:
phpunit --list-groups
スキップされたテストや不完全なテストに関する情報を見るには、--verbose
を使用します:
phpunit --group wpdb --verbose
There was 1 skipped test:
1) Tests_DB::test_charset_switched_to_utf8
This test requires utf8mb4 to not be supported.
tests/phpunit/tests/db.php:1332
デフォルトでは、AJAX テスト (コアが wp-admin/admin-ajax.php
を使用するために作成されたテスト) は実行されません。これらを実行するには:
phpunit --group ajax
マルチサイトでテストを実行するには、multisite.xml
設定ファイルに切り替える必要があります:
phpunit -c tests/phpunit/multisite.xml
さらに、npm run grunt phpunit
を実行することで、ajax テストや multisite テストを含む PHPUnit テストを実行できます。
パッチの作業中にターミナルに切り替えて主導でテストグループを繰り返し実行するのではなく、継続的に実行し続けることができます。ファイルを保存するたびに、テストグループは自動的に再実行されます。これにより、ある変更によってテストが壊れたり合格したりしたことをすぐに知ることができます。
PHPUnit テストおよびその他のすべての監視タスクを実行するには、次のようにします:
npm run grunt watch -- --phpunit --group={testgroup}
PHPUnit 監視タスクのみを実行するには、次のようにします:
npm run grunt watch:phpunit -- --group={testgroup}
カンマ区切りで複数のグループを実行します:
npm run grunt watch:phpunit -- --group=community-events,privacy
環境変数 WP_TESTS_SKIP_INSTALL
を 1
に定義することで、スイートがインストール手順をスキップするようになり、スイートの速度を向上させることができます。これは完全なテストの実行には使用すべきではありませんが、小さなテストグループの実行時間を節約することに役立ちます。
WP_TESTS_SKIP_INSTALL=1 phpunit --group=privacy
WordPress の PHPUnit テストを作成し始めるためのガイドを作成しました。
貢献するためには、主に3つの方法があります:
報告されたバグのテストを作成する。 貢献するすばらしい方法は、既存のバグ報告を実証するテストを作成することです。コア開発者は、テストカバレッジのないコアの多くの繊細な部分のパッチを検討することに消極的です。適切に作成されたテストは、パッチが副作用なしに問題を修正することを確認するのに役立ち、将来的にリグレッションが発生することを防ぐことができます。チケットを進めるためにテストが特に必要であったり望ましい場合は、needs-unit-tests ワークフローキーワードを受け取ります。既存のチケットのテストは WordPress コアの Trac で直接提出できます。テストケースを含むバグレポートを提出するとよりよいでしょう。
コードカバレッジを向上させるために新しいテストを作成する。 WordPress の多くの領域で、十分なテストカバレッジを持っていません。関数、クラス、コンポーネントを選んで、そのテストを作成してください。これらのテストは WordPress Trac で提出できます。
既存のテストケースを修正または改善する。 既存のテストには改善の余地がたくさんあります。古いものもあれば、速度が遅い、または壊れやすいものもあります。マルチサイトや特定の条件下でうまくテストできてないものもあります。一部の個別のテストより多くのことをテストしようとしており、データプロバイダ、依存関係、より限定的なアサーションを使用することで改善できる可能性があります。
JavaScript コードのユニットテストは、PHP のユニットテストに比べて WordPress コアではかなり制限されています。JS ユニットテストの詳細については、Make/Core の投稿やハンドブックの QUnit セクションを参照してください。