WP-CLIでは、phpunitによるユニットテストの他にも、behatを使ったビヘイビア駆動のテストなどもしていて、WP-CLIにプルリクを送る際には事前にローカルでこれらのテストを実行したほうがいろいろ手っ取り早いです。
テストに必要な環境の構築や実際のテストに必要なコマンド等は.travis.yml
を見れば書いてあるんですが、いざ実行しようとするとあれ?みたいなことを毎回繰り返すので手順をメモ。
テスト環境の構築方法
以下のコマンドはすべてWP-CLIのディレクトリ直下で行うこと。
まず、過去にテストを行ったことがある場合、以下のコマンドでその環境を削除する必要があります。
MySQLのrootユーザーにパスワードが設定されていると後で実行するシェルスクリプトを手作業でごにょごにょする必要があるので注意。
$ rm -fr /tmp/wp-cli-*
$ echo "drop database wp_cli_test" | mysql -u root
つぎに環境をセットアップするためのシェルスクリプトを実行する。
環境変数が適切にセットされてないとうまく動かないのでここも注意が必要です。多くの場合このままでいけるはず。
$ WP_VERSION=latest WP_CLI_BIN_DIR=/tmp/wp-cli-phar bash ./ci/prepare.sh
テストの実行
最後に以下のコマンドでテストを実行する。
$ WP_VERSION=latest WP_CLI_BIN_DIR=/tmp/wp-cli-phar bash ci/test.sh
WP-CIのテストではすべてのコマンドが順番に実行されますのでかなり時間がかかります。30分ぐらいは見ておいたほうがいいかも。
自分が修正したサブコマンドだけテストを実行するなら、以下のような感じです。
$ vendor/bin/behat features/comment.feature
上の例ではwp comment
及びそのサブコマンドのテストのみが行われます。
features/
以下にはBehat用のテストケースがサブコマンドごとに別々のファイルで保存されています。
このテストコードは以下のようになってて、初めて見たときはこんなやり方があるのかと感動しました。
When I run `wp plugin install akismet --version=2.5.7 --force`
Then STDOUT should not be empty
When I run `wp plugin list --name=akismet --field=update_version`
Then STDOUT should not be empty
And save STDOUT as {UPDATE_VERSION}
When I run `wp plugin list --fields=name,status,update,version,update_version`
Then STDOUT should be a table containing rows:
| name | status | update | version | update_version |
| akismet | inactive | available | 2.5.7 | {UPDATE_VERSION} |