【发布时间】:2017-03-20 21:42:04
【问题描述】:
我遇到了很多类似这样的错误:
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 并用 if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false) 包裹 print $buffer 行(有效地停止 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 版本相同。
【问题讨论】:
标签: php zend-framework phpunit zend-session