在WordPress之外使用WordPress(wp-load.php):“无法修改标题信息 - 标题已经发送”

时间:2017-11-23 16:37:04

标签: wordpress phpunit

我正在尝试使用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类中的一个或两个函数。

1 个答案:

答案 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文件。