SO网友:J.D.
如果您使用wp_die()
您可以使用WordPress的PHPUnit测试套件中包含的工具。这个WP_Ajax_UnitTestCase
提供_handleAjax()
方法,该方法将钩住wp_die()
并引发异常,这将阻止die()
避免被呼叫。我写了一个tutorial on how to use WP_Ajax_UnitTestCase
, 这解释了它提供的所有功能,但下面是一个基本示例:
class My_Ajax_Test extends WP_Ajax_UnitTestCase {
public function test_some_option_is_saved() {
// Fulfill requirements of the callback here...
$_POST[\'_wpnonce\'] = wp_create_nonce( \'my_nonce\' );
$_POST[\'option_value\'] = \'yes\';
try {
$this->_handleAjax( \'my_ajax_action\' );
} catch ( WPAjaxDieStopException $e ) {
// We expected this, do nothing.
}
// Check that the exception was thrown.
$this->assertTrue( isset( $e ) );
// Check that the callback did whatever it is expected to do...
$this->assertEquals( \'yes\', get_option( \'some_option\' ) );
}
}
请注意,从技术上讲,这是集成测试而不是单元测试,因为它测试回调功能的完整横截面,而不仅仅是单个单元。WordPress就是这样做的,但根据回调代码的复杂性,您可能还想为其创建真正的单元测试,可能会将其中的部分抽象为其他可以模拟的函数。