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() для тестирования?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
391
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Пример

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]);

Другие вопросы по теме