Mic*_*ssa 27 php phpunit zend-framework zend-session
我收到的错误很多,就像这个:
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
Run Code Online (Sandbox Code Playgroud)
运行我的应用程序的测试套件时.这是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);
}
}
Run Code Online (Sandbox Code Playgroud)
测试失败:
1) SessionTest::testSession
session_start(): Cannot send session cookie - headers already sent by (output started at /home/mmsa/test.php:1)
Run Code Online (Sandbox Code Playgroud)
但是,完全相同的测试适用于朋友的机器.相同版本的PHP和PHPUnit.
Fra*_*mer 37
使用-stderr标志运行phpunit,(较新版本可能使用--stderr)例如
phpunit -stderr mytest.php
# or
phpunit --stderr mytest.php
Run Code Online (Sandbox Code Playgroud)
这将phpunit的输出定向到stderr,防止它中断HTTP标头生成.
测试可能在您朋友的机器上运行,因为他启用了输出缓冲(尽管我不确定这是否与CLI上下文相关).
小智 6
我认为更好的方法是使用
Zend_Session::$_unitTestEnabled = true;
Run Code Online (Sandbox Code Playgroud)
在我的测试引导程序中使用它可以防止出现此错误.
归档时间: |
|
查看次数: |
7081 次 |
最近记录: |