it-swarm-ja.com

テスト用にget_adjacent_postをモックするにはどうすればよいですか

私はユニットテストのためにget_adjacent_postをモックしようとしていますが、私はPHPUnitでグローバル関数をモックする方法がわからない

    $badCode = $this->getMockBuilder('get_adjacent_post')
        ->setMethods(array('somthing'))
        ->getMock();

これは私がこれまでに得たもので、明らかにうまくいきません。

そして、これが私がプロダクションコードで使う方法です。

$prev_post = get_adjacent_post( true, '', true, 'topic' );
2
toy

私はWP_Mockを長い間使っていましたが、私が見つけた問題を克服するために Brain Monkey をビルドしました。

Brain Monkey を使うと、次のことができます。

use Brain\Monkey\Functions;

Functions::when('get_adjacent_post')->alias(function() {
  // mock here...
});

または

Functions::expect('get_adjacent_post')
  ->atLeast()
  ->once()
  ->with( true, '', true, 'topic' )
  ->andReturnUsing(function( $in_same_term, $excluded_terms, $previous ) {
     // mock here
  });

後者の構文は Mockery から来ています。

Brain Monkey は、 WP_Mock と同じように、WordPressフックもモックするAPIを持っています。

4
gmazzap

私はあなたが探していると思います WP_Mock

WP_Mockは、WordPress内で単体テストを正しく行えるようにするために10upによって構築および管理されているAPIモックフレームワークです。

そこの例 から、あなたはこのようにget_permalink()をモックするでしょう:

    \WP_Mock::wpFunction( 'get_permalink', array(
        'args' => 42,
        'times' => 1,
        'return' => 'http://example.com/foo'
    ) );
2
J.D.