PHPUnit如何测试包含check_admin_referer()的WordPress函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHPUnit如何测试包含check_admin_referer()的WordPress函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2748字,纯文字阅读大概需要4分钟。
内容图文
我刚开始用Wordpress学习PHPUnit.我有一个插件可以从change.org获取请愿数据.其中一个管理类函数验证来自Wordpress管理区域的设置,并在此验证过程中调用`check_admin_referer().
public function sc_validate_settings() {
//check nonce field is valid
check_admin_referer($this->plugin_name, 'security');
//get new settings
$settings = $this->sc_clean_new_settings();
//validate url
$valid_url = $this->sc_validate_url($settings['petition_url']);
//validate api_key
$valid_api_key = $this->sc_validate_api_key($settings['petition_api_key']);
if ($valid_url && $valid_api_key) {
$this->clean_settings = $settings;
return true;
}
return false;
}
如果我注释掉check_admin_referer(),那么这个PHPUnit测试会通过,但如果没有,我就无法通过.
public function testValidateSettings() {
$this->assertTrue($this->plugin_admin->sc_validate_settings());
}
我已尝试手动设置一个nonce,action和_wp_http_referer,并通过test / bootstrap.php中的$_POST和测试类本身通过wp_nonce_field()设置.我已经阅读了一些关于模拟对象/方法的内容,但是在这个实例中并没有看到它们如何被使用.
我可能完全误解了所有这些是如何工作的,但任何帮助将不胜感激!
最佳答案:
问题是测试在命令行模式下运行,当然,当前用户未在那里进行身份验证.
如何使其工作有几种选择.一种选择是将auth-check函数check_admin_referer()或其底层的wp_verify_nonce()存根.但这不是最好的方法,因为测试有集成的味道,而存根更像是单元测试的方法.
一个好的解决方案是验证用户以使测试通过.你可以这样做比较容易:
public function testValidateSettings() {
$_REQUEST['security'] = wp_create_nonce($this->plugin_admin->plugin_name);
$this->assertTrue($this->plugin_admin->sc_validate_settings());
}
我不相信$this-> plugin_admin-> plugin_name会起作用,因为它可能是私有财产.所以你可以将它作为硬编码字符串传递:
public function testValidateSettings() {
$_REQUEST['security'] = wp_create_nonce('whatever your plugin name is');
$this->assertTrue($this->plugin_admin->sc_validate_settings());
}
在测试后清理也很棒,所以你的测试用例肯定应该有:
public function tearDown() {
unset($_REQUEST['security']);
}
我不认为你需要在测试后清理新创建的nonce,因为WP原始测试也不会清除它.
这很漂亮.
起色
如果测试用例中的所有测试都需要身份验证,您可能希望将nonce-creation放入setUp() – 这将使测试用例更漂亮,因为拆卸代码将与设置问题匹配:
public function setUp() {
$_REQUEST['security'] = wp_create_nonce('whatever your plugin name is');
}
public function tearDown() {
unset($_REQUEST['security']);
}
public function testValidateSettings() {
$this->assertTrue($this->plugin_admin->sc_validate_settings());
}
建议
安装Xdebug并通过IDE连接到它 – 这将帮助您逐步完成代码,看看哪些内容无法正常工作.这比盲目地与所有这些nonce,http引用等等一起挣扎更好.
注意
WP代码非常难过.全局命名空间中的大量函数列表,缺少OOP,没有完整的请求处理周期(例如意外的die()) – 实在令人沮丧,因为它使代码库的扩展和测试变得非常困难.
所以准备好与代码进行更多的战斗:)
内容总结
以上是互联网集市为您收集整理的PHPUnit如何测试包含check_admin_referer()的WordPress函数?全部内容,希望文章能够帮你解决PHPUnit如何测试包含check_admin_referer()的WordPress函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。