WP_Ajax_UnitTestCase가 WPAjaxDieStopException을 슬로우하지 않음
좋아요, 워드프레스 플러그인에 대한 Ajax 콜백을 테스트하고 있습니다.그래서 기본적으로는 https://codesymphony.co/wp-ajax-plugin-unit-testing/의 지시에 따랐습니다.
여기 내 ajax 콜백 함수가 있습니다.
public function my_plugin_get_site_pages( $args = null ) {
//...... Processing $site_pages.....
$response = array(
'status' => 'success',
'site_pages' => $site_pages
);
@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
echo wp_json_encode( $response );
wp_die();
}
여기 내 시험이야
class My_Plugin_Ajax_Test extends WP_Ajax_UnitTestCase {
private $_foo;
public function setup() {
//.....Initialize $_foo here...
}
public function test_foo() {
try {
$_POST[ 'args' ] = array( 'return_format' => 'raw' );
add_action( 'wp_ajax_my_plugin_get_site_pages' , array( $this->_foo , 'my_plugin_get_site_pages' ) );
//$this->setExpectedException( 'WPAjaxDieStopException' );
$this->_handleAjax( 'my_plugin_get_site_pages' );
} catch ( WPAjaxDieStopException $e ) {}
//$response = json_decode( $this->_last_response );
$response = $this->_last_response;
var_dump( $response );
}
}
자, 여기 문제가 있습니다.
- WPAjax DiStop Exception은 정상적으로 동작하지 않습니다.
이 코드를 실행하면$this->setExpectedException( 'WPAjaxDieStopException' );
https://snag.gy/JSTqHV.jpg 테스트에 불합격합니다.
- wp_die()가 트리거된 것을 출력하기 때문에 이 코드는
$response = $this->_last_response; var_dump( $response );
이것을 인쇄합니다.
2번은 할 수 없기 때문에 문제다.json_decode
출력된 문자열은 유효하지 않은 json 문자열이기 때문에 테스트를 계속할 수 없습니다.
워드프레스 플러그인에 대한 자동 테스트로 시작했는데, 도움을 주셔서 감사합니다.
주의: 내 Ajax 콜백은 wp_die()를 사용해도 내 라이브 플러그인으로 정상적으로 동작하고 있으며, 내 테스트에서 이상한 'wp_die called...' 문자열만 출력됩니다.
제 php 버전은 5.6.21이고 phpunit 버전은 4.8.26입니다.
여기 몇 가지 추가 정보가 있습니다.
따라서 'WPAjax DieStopException'과 'WPAjax DieContinue' 모두예외'는 던져지지 않습니다.
근데 재밌는 건 이걸 할 때
$this->_setRole( 'administrator' );
콘솔에 이 오류가 표시됨
Trying to get property of non-object
/tmp/wordpress-tests-lib/includes/testcase-ajax.php:151
/vagrant/www/wordpress/wp-content/plugins/my-plugin/tests/test-file.php:30
WP_Ajax_UnitTestCase를 확장하고 있으며 _setRole 메서드 https://core.trac.wordpress.org/browser/trunk/tests/phpunit/includes/testcase-ajax.php#L168를 사용하고 있습니다.
또한 phpunit을 실행하면 콘솔에 오류 또는 경고가 표시됩니다.
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
WordPress database error Duplicate key name 'location_type_code' for query ALTER TABLE wptests_woocommerce_tax_rate_locations ADD KEY location_type_code (location_type(40),location_code(90)) made by PHPUnit_TextUI_Command::main, PHPUnit_TextUI_Command->run, PHPUnit_TextUI_Command->handleArguments, PHPUnit_TextUI_Command->handleBootstrap, PHPUnit_Util_Fileloader::checkAndLoad, PHPUnit_Util_Fileloader::load, include_once('/vagrant/www/wordpress/wp-content/plugins/my-plugin/tests/bootstrap.php'), require('/tmp/wordpress-tests-lib/includes/bootstrap.php'), require_once('wp-settings.php'), do_action('init'), call_user_func_array, WC_Install::check_version, WC_Install::install, WC_Install::create_tables, dbDelta
또한 vagrant를 사용하고 있으며 개발 환경용으로 http://vccw.cc/을 사용하고 있습니다.또한 이 가이드에 따라 woocommerce 확장 테스트를 추가합니다.https://github.com/Automattic/wc-extensions-code-test-guide
이 모든 추가 정보가 이 문제를 최종적으로 해결하는 데 도움이 되기를 바랍니다.
한동안 자리를 비웠고, 매우 바빴고, 마침내 이 문제를 해결할 시간이 생겼죠.알고 보니 바보 같은 실수였다.
WP_UnitTestCase를 확장한 WP_Ajax_UnitTestCase를 사용하고 있기 때문에
WP_Ajax_UnitTestCase에서 함수 셋업을 사용할 때는 이것을 호출해야 합니다.parent::setup();
public function setup() {
parent::setup();
// your init codes here
}
내 기존 코드로 호출한 게 아니라서 테스트가 이상하게 돌아가는 거야이를 추가하면 모든 이상한 문제가 해결되고 예상대로 테스트가 실행되며 필요한 예외가 발생합니다.
Ajax 콜백 함수가 출력을 출력하지 않을 경우 WPAjax DieStop Exception이 느려집니다.
WPAjax Die Continue (WPAjax Die Continue)Ajax 콜백이 출력을 생성하면 예외가 느려집니다.
꼭 하세요.wp_die()
die()
콜백에서 를 됩니다.
WordPress 플러그인으로 자동 테스트를 수행하기 위한 광범위한 가이드를 작성할 예정입니다. 조만간 링크를 여기에 놓겠습니다.
지금으로서는 이것이 누구에게나 도움이 되길 바란다.
언급URL : https://stackoverflow.com/questions/37639955/wp-ajax-unittestcase-does-not-throw-wpajaxdiestopexception
'programing' 카테고리의 다른 글
jQuery grep()를 사용한 JSON 배열 필터링 (0) | 2023.03.18 |
---|---|
Wordpress가 웹 루트에 설치되어 있는 하위 디렉토리에서 Joomla 웹 사이트를 실행하는 방법 (0) | 2023.03.18 |
Spring 5 WebFlux의 @Controller와 라우터의 기능 차이 (0) | 2023.03.18 |
리액트 라우터 허가 (0) | 2023.03.18 |
부모의 범위에 액세스하는 사용자 지정 하위 지시문 (0) | 2023.03.18 |