マルチサイト専用のプラグインを作る機会があったのですが、そのときに手元でPHPUnitするときのメモです。
とりあえず、wp-cliでプラグインのひな形を作ります。
$wp scaffold plugin hoge
このままphpunitを実行してもマルチサイトにならないので、以下のようなテストコードを書くと失敗します。
class SampleMultisiteTest extends WP_UnitTestCase {
public function test_is_multisite() {
$this->assertTrue( is_multisite() );
}
}
その場合、phpunit.xmlを以下のように改変します。
<phpunit
bootstrap="tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<php>
<const name="WP_TESTS_MULTISITE" value="1" />
</php>
<testsuites>
<testsuite>
<directory prefix="test-" suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
WP_TEST_MULTISITEという値を渡してあげるとマルチサイトとしてテスト用のWordPressがインストールされて動作します。
https://github.com/torounit/multisite-sample-plugin
Travis CIだとtravis.yml弄るだけで大丈夫です。Travisすげー。
追記
宮内さんに
$ WP_MULTISITE=1 phpunit
でいけるだろ、と指摘されました。そりゃそうだ。
シングルサイトでもしっかりテストしなきゃ行けないときはコマンドラインで変数を渡して上げる方が良いですね。