WordPressのマルチサイトでも手元でPHPUnitを動かす。

マルチサイト専用のプラグインを作る機会があったのですが、そのときに手元で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

でいけるだろ、と指摘されました。そりゃそうだ。

シングルサイトでもしっかりテストしなきゃ行けないときはコマンドラインで変数を渡して上げる方が良いですね。