Php издевается над функцией вне класса - PullRequest
0 голосов
/ 18 июня 2019

В документах Mockery есть примеры для насмешливых классов и их членов, но я не вижу деталей для насмешливых включенных функций. Я хотел бы посмеяться над реализацией для wp_send_json(), которая вводится /wp-includes/functions.php. Можно использовать издевательство или любую другую библиотеку 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() смоделировать / переопределить для тестирования?

1 Ответ

1 голос
/ 18 июня 2019

С php-mock можно имитировать глобальные функции.

Пример

composer require --dev php-mock/php-mock
namespace 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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...