猿问

Php 在类之外模拟一个函数

Mockery 文档有模拟类及其成员的示例,但我没有看到任何有关模拟包含函数的详细信息。我想模拟wp_send_json()由/wp-includes/functions.php. 可以使用 Mockery 或任何其他 php 库。


这是 的用法wp_send_json()。覆盖此函数将允许我对输入值运行 json_encode() ,然后将其返回以进行干净的单元测试:


function handleAjax() {

   $name = $_POST['name'];

   return wp_send_json($name);

}

在我的测试套件中,我这样称呼它:


use \Symfony\Component\HttpFoundation\Request;


class UtilitiesTest extends \Codeception\TestCase\WpTestCase {

  _before() {


  }


  testHandleAjax() {

    $request = Request::create(

      null,

      'POST',

      ['name' => 'John']

    );

    $request->overrideGlobals(); // $_POST is now mocked


    $result = handleAjax();

    $this->assertEquals('John', $result);

  }

}

如何wp_send_json()模拟/覆盖无类函数以进行测试?


萧十郎
浏览 131回答 1
1回答

肥皂起泡泡

使用php-mock可以模拟全局函数。例子composer require --dev php-mock/php-mocknamespace Test;use phpmock\MockBuilder;$builder = new MockBuilder();$builder->setNamespace(__NAMESPACE__)        ->setName('wp_send_json')        ->setFunction(            function ($response) {                // echo json_encode($response);            }        );$mock = $builder->build();$mock->enable();wp_send_json(['success' => true]);
随时随地看视频慕课网APP
我要回答