PHPUnit通过WP-CLI:警告:无法修改标题信息...Bootstrap.php:68

时间:2017-07-26 作者:Scruffy Paws

我正在尝试为我正在开发的插件设置单元测试。我只是跟着…的脚步走。。。https://make.wordpress.org/cli/handbook/plugin-unit-tests/

然而,当我跑步时phpunit 我得到以下信息。。。

$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml

Warning: Cannot modify header information - headers already sent by (output started at /private/tmp/wordpress-tests-lib/includes/bootstrap.php:68) in /Users/<USERNAME>/Sites/<MYSITE.COM>/wp-load.php on line 64
我正在跑步。。。

Mac OS 10.12.6 PHP v5。6.30注意到错误,bootstrap.php:68 这是程序输出“安装…”的开始上述输出的文本。第68行显示。。。

system( WP_PHP_BINARY . \' \' . escapeshellarg( dirname( __FILE__ ) . \'/install.php\' ) . \' \' . escapeshellarg( $config_file_path ) . \' \' . $multisite );  

2 个回复
最合适的回答,由SO网友:J.D. 整理而成

错误告诉您,代码试图输出一个HTTP响应头header() 响应正文已开始发送后的函数。如您所述,第68行bootstrap.php 正在调用输出Installing.... 因此,在输出已经发送之后,您不能发送响应头。

调试的下一步是找出发送响应头的原因。这是不应该发生的,因为这里我们是从命令行运行测试,实际上我们并没有向浏览器发送页面。

所以,我们需要看看header() 正在调用。错误告诉您它在wp-load.php 第64行:

    header( \'Location: \' . $path );
这条线本身并没有告诉我们太多,但我们发现它在一个大范围内if ... else 声明:

/*
 * If wp-config.php exists in the WordPress root, or if it exists in the root and wp-settings.php
 * doesn\'t, load wp-config.php. The secondary check for wp-settings.php has the added benefit
 * of avoiding cases where the current directory is a nested installation, e.g. / is WordPress(a)
 * and /blog/ is WordPress(b).
 *
 * If neither set of conditions is true, initiate loading the setup process.
 */
if ( file_exists( ABSPATH . \'wp-config.php\') ) {

    /** The config file resides in ABSPATH */
    require_once( ABSPATH . \'wp-config.php\' );

} elseif ( @file_exists( dirname( ABSPATH ) . \'/wp-config.php\' ) && ! @file_exists( dirname( ABSPATH ) . \'/wp-settings.php\' ) ) {

    /** The config file resides one level above ABSPATH but is not part of another install */
    require_once( dirname( ABSPATH ) . \'/wp-config.php\' );

} else {

    // snip

    header( \'Location: \' . $path );

    // snip

}
基本上这告诉我们wp-load.php 正在寻找wp-config.php 文件,但找不到它。因此,它正在启动设置过程,并且作为该过程的一部分,它试图通过发送Location 标题。

所以你显然没有设置wp-config.php 正确归档。

这个wp-config.php 文件应该是由您运行的脚本设置的,所以这很可能是某种失败的指示。事实上,由于我们在这里运行测试wp-tests-config.php 应改用文件。所以下一步就是找出原因wp-tests-config.php 未加载。你应该可以在/tmp/wordpress-tests-lib/ 目录

SO网友:Rick Hellewell

这个问题听起来像是您的代码正在向屏幕发送文本/字符,然后它会发送一个页面“header”(标题)<head> HTML页面的一部分)。PHP不喜欢这样;一旦在屏幕上输入任何字符,就无法发送页眉(即<head> 零件)。

有时,它就像前面的空格字符一样简单<?php 密码检查是否存在此问题,或者是否有任何其他文本在页眉之前发出。

结束

相关推荐

How to use wp-cli.yml file?

我想建立一个wp-cli.yml 但每次我运行该命令时,该文件都会被忽略。文件应位于何处?我应该如何调用命令来使用它?我尝试在项目的根目录中有一个文件,以及上面的文件夹。我还尝试使用以下文件名:wp-cli.local.yml,wp-cli.yml我试着运行一些类似于:wp local core download 但我一直得到以下错误:错误:这似乎不是WordPress安装。Pass--路径=path/to/wordpress 或运行wp core download.PS: 我不确定wp cli