我正在尝试使用PHP单元测试我编写的API类,以便使用WordPress插件Gravity Forms的插件。该类依赖于WordPress中的几个函数,例如wp_remote_request()。
为了能够访问这些WordPress依赖项,我试图在我的PHP单元测试类中使用wp-load.php:
dependencies {
compileOnly 'org.projectlombok:lombok:1.16.18'
apt "org.projectlombok:lombok:1.16.18"
}
然而,当我尝试这个时,我在运行phpunit后在终端中得到以下输出:
Cannot modify header information - headers already sent by (output started at phar:///usr/local/Cellar/phpunit/6.4.2/libexec/phpunit-6.4.2.phar/phpunit/Util/Printer.php:112) ../wp-includes/functions.php:3760 ../wp-includes/load.php:422 ../wp-settings.php:110 ../wp-config.php:228 ../wp-load.php:37 ../wp-content/plugins/gravity-dpo/tests/TestCaseAddon.php:37
查看wp-includes / functions.php文件,我可以在函数dead_db()中的第3760行看到以下类,这是导致错误的原因:
define( 'WP_USE_THEMES', false );
require '../../../wp-load.php';
当然要求wp-load.php应该是微不足道的,所以我可以使用PHP单元测试一个带有一些WordPress依赖的类?我会很感激我在这里做错了什么。我正在努力避免创建一个完全成熟的WordPress单元测试设置,因为我只想测试我的API类中的一个或两个函数。
答案 0 :(得分:1)
有时您可能希望测试某些功能而无需实际创建插件/添加。使用以下代码段创建test.php文件并将其放在 WordPress根目录中:
<?php
// Load the WordPress Environment
// define( 'WP_DEBUG', true ); /* uncomment for debug mode */
require(./wp-load.php);
// require_once (./wp-admin/admin.php); /* uncomment for is_admin() */
?>
<pre>
<?php
/* test stuff here */
var_dump( is_admin() );
?>
</pre>
这是加载所有必需的WordPress功能以测试插件功能而无需实际创建插件的快速方法。如您所见,wp-load.php
包含在文件的开头。如果要测试管理员端功能,还可以包含wp-admin/admin.php
。
一旦包含了所需的WordPress核心文件,就需要测试任何存在于插件中的代码。完成测试后,请不要忘记删除test.php
文件。