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()
进行测试?
答案 0 :(得分:1)
使用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]);