【发布时间】:2016-12-19 17:18:49
【问题描述】:
我刚刚开始使用 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());
}
我尝试在 tests/bootstrap.php 和测试类本身中手动设置随机数、操作和 _wp_http_referer,并通过 wp_nonce_field() 和 $_POST 设置。而且我已经阅读了一些关于模拟对象/方法的内容,但不太了解它们在这种情况下如何使用。
我可能完全误解了这一切的工作原理,但我们将不胜感激!
【问题讨论】: