PHPUnitでwp_enqueue_scriptsの結果をテストする

ちょっとメモです。

オレオレフックを使ってCSSを無効化できるようにした時に、CSSが出ないことを確認する方法。

プラグイン側の処理

プラグイン側は以下のような感じ

public function wp_enqueue_scripts()
{
    $style = apply_filters( 'simple_share_style', plugins_url( 'css/simple-share.css', __FILE__ ) );
    if ( $style ) {
        wp_enqueue_style(
            'simple_share',
            $style
        );
    }
}

上のコードはテーマや他のプラグイン等に以下のようなコードを記述するとcss/simple-share.cssが出力されないようになることを想定しています。

add_filter( 'simple_share_style', "__return_false" );

この程度の処理ならPHPunitはいらないでしょという声もあるかもですけど、汎用的なプラグインをつくっているとだんだん巨大化してくるので、数行のコピペで済むなら目視での確認は省略したいんですよね。

 

PHPUnitのテスト用コード

上述の処理が適切に動作しているかどうかは以下の様に確認できる。

/**
 * wp_style_is( 'simple_share' ) should be true.
 *
 * @test
 * @runInSeparateProcess
 * @preserveGlobalState disabled
 */
pubic function wp_enqueue_scripts()
{
    do_action( 'wp_enqueue_scripts' );
    $this->assertTrue( wp_style_is( 'simple_share' ) );
}

/**
 * wp_style_is( 'simple_share' ) should be false when simple_share_style filter would return false.
 *
 * @test
 * @runInSeparateProcess
 * @preserveGlobalState disabled
 */
public function filter_simple_share_style()
{
    add_filter( 'simple_share_style', "__return_false" );
    do_action( 'wp_enqueue_scripts' );
    $this->assertFalse( wp_style_is( 'simple_share' ) );
}

一つ目のメソッドは、フィルターフックに何も定義されていないのでCSSが出力されていることをテストしている。

2つ目のメソッドでは、フィルターフックで__return_falseされているのでCSSが出力されていないことをテストしている。

 

アノテーションを忘れるとうまく動作しないので注意。