我收到了许多与此完全相同的错误:
Zend_Session_Exception: Session must be started before any output has been sent to the browser; output started in /usr/local/zend/share/pear/PHPUnit/Util/Printer.php/173
运行我的应用程序的测试套件时。这适用于 PHPUnit 3.5.10 和 PHP 5.3.5。
没有导致这种情况的神秘、意外的空白输出。我已经确定“发送到浏览器的输出”是正在执行的 PHPUnit 测试的实际输出。如果我打开 PHPUnit/Util/Printer.php 并print $buffer
用if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false)
(有效地停止 PHPUnit 的第一行输出)换行,那么我的第一个测试成功(直到测试用例输出一个点表示测试成功,然后下一个测试失败,因为点已输出)。
我团队中的另一位开发人员能够成功运行完整的测试套件,所以我知道这不是应用程序代码的问题。一定是我的本地环境的一些配置设置或问题。
我已经检查了 php.ini 以验证它output_buffering
是否已打开和implicit_flush
关闭,并且它们是。
我也尝试添加Zend_Session::$_unitTestEnabled = true;
到我的测试引导程序中,但这并没有帮助(无论如何也不应该有必要,因为它可以在另一个开发人员的机器上以及没有它的情况下在我们的 CI 服务器上工作)。
除了忽略错误之外还有什么建议吗?我从来没有见过这样的事情,我真的很茫然。
谢谢!
更新:
为了尝试进一步隔离问题,我通过执行以下测试脚本将 ZF 和我的应用程序排除在外:
<?php
class SessionTest extends PHPUnit_Framework_TestCase
{
public function testSession()
{
session_start();
$this->assertTrue(true);
}
}
测试失败:
1) SessionTest::testSession
session_start(): Cannot send session cookie - headers already sent by (output started at /home/mmsa/test.php:1)
但是,完全相同的测试可以在朋友的机器上运行。相同版本的 PHP 和 PHPUnit。