数年ぶりにWordPressを触ることになり、色々覚え書きがてら書いていきます。
基本的にWordPressの人ではないです。
テストをするだけでなく、プラグイン内の関数を直接起動して開発したくてPHPUnitを導入することにしました。
フック使えよとか、まあそうなんですがフックの数多すぎでよくわからんのです。
動作させている環境ですが、OSX上のVagrantにCentOSを乗っけて、その中でDockerを使ってUbuntu環境でWPを動かしています。
ですので、ファイルのパーミッションとか実行するユーザーなどは少し変です。
WP-CLIのインストール
WPの便利ツールです。CLI大好き派としては大変ありがたいです。インストールは全くもって簡単です。
http://wp-cli.org に書いてあるようにダウンロードしてパスの通っている場所へ移動させるだけです。
これを使ってphpunitの実行環境をつくります。
これだけ。さて、実行してみます。
エラーが出てしまいました。どうもrootで実行してはいけないらしいです。ただ、開発環境だし、docker上でrootでなんでもやっているのとファイルはホスト(OSX)とnfsで共有しているので、共有しているUIDを使ってユーザー作ってsudoすることにしました。
PHPUnitのインストール
phpのバージョンが5.5なので最新版は使えません。なので一つ前のバージョンを入れます。
WP-CLIを使ってPHPUnitを使う準備
テストに必要なファイルの配置
PHPUnitをWordpressで動かすのにどうやら、もう一つWordpressを別の場所にインストールするようです。
テストはテストのたびにDBをリセットしてプラグインを読み込んでその別Wordpress上で行います。
その別Wordpressをインストールしてテスト環境を構築する処理をWP-CLIがやってくれます。
Plugin名をhogePluginとします。
wp scaffoldは自分が実行したところwordpressのインストールプラグインを--pathとして渡さないとエラーが出てしまいました。
これでプラグインディレクトリに
が出来ているはずです。
テスト環境の構築
bin/install-wp-tests.sh
を使用して新しいWordpressの実行環境とデータベースとテストに必要なファイルをインストールします。
ということですが、データベースを作成するのでDBを作れるユーザーでないとダメです。開発環境だしDocker上だしで自分はroot使ってしまいます。
そうすると指定したバージョンのWordPressをダウンロードして/tmp/wordpress
に展開します。/tmp/wordpress-tests-lib
にも色々入ります。その時にsvnをつかっているのでsubversionもインストールしておきましょう。
最近はgitばかりでsubversion使っていないので入っていないことが多そうです。
ログが流れて最後に
とでたら完了です。途中で失敗した場合 /tmp/wordpress,/tmp/wordpress-tests-lib
を削除してから再実行して下さい。
テストの実行
WP-cliが作ってくれたサンプルのテストコードがあるのでphpunitと実行するだけで動くはずです。
っと、エラーが出てしまいました。uploadsディレクトリがないようです。
サンプルテストが通りました!
これでPHPUnitが使えるようになりました。PHPUnitの使い方はここでは書きません。
おまけ
テスト環境に日本語WordPressを使う
/tmp/wordpress
を同じバージョンの日本語版WordPressに手動で入れ替えてあげればいいだけです。
uploadsディレクトリを作るのをお忘れ無く。
テストでのタイムゾーンを変更する
デフォルトだとテスト環境のタイムゾーンはUTCです。これをAsia/Tokyoにする場合はテスト用DBのwp_options内にあるtimezone_stringをAsia/Tokyoに変えればいいような気がします。
ただ、これをやっても変わりません。実はテストをするたびにDBがリセットされてしまっています。なので、/tmp/wordpress/wp-admin/includes/schema.php
を少々いじります。
これでタイムゾーンが東京になります。