В документах 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-макет можно имитировать глобальные функции.
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]);