我有一段代码,我正在使用PHPUnit进行测试,并收到以下错误:
session_regenerate_id(): Cannot regenerate session id - headers already sent
我想知道发送标头的位置;一般来说,当我在浏览器中测试代码时,我会看到一个警告,提到这样的位置:
Warning: Cannot modify header information - headers already sent by
(output started at /www/xxxx/x.php:52) in /www/xxxx/index.php on line 123
但在PHPUnit测试中,没有这样的信息; PHPUnit只显示上面的错误和回溯:
/var/www/yii/framework/web/CHttpSession.php:166
/var/www/yii/framework/web/auth/CWebUser.php:681
/var/www/yii/framework/web/auth/CWebUser.php:214
...
只指向错误发生的位置。
我该怎么办?
答案 0 :(得分:1)
它告诉您标题的发送位置 解决方案是模拟测试函数中的会话组件。
$mockSession = $this->getMock('CHttpSession', array('regenerateID'));
Yii::app()->setComponent('session', $mockSession);
答案 1 :(得分:0)
我遇到了同样的错误,但是我没有使用Yii。这是我使用ob_*
函数解决的方法:
我使用的是phpunit.xml
配置文件,其中提到了 bootstrap 文件:
<phpunit bootstrap="phpunit_bootstrap.php">
...
</phpunit>
在phpunit_bootstrap.php
中,我开始使用ob_start()
<?php
ob_start();
// some other configuration lines ...
然后我在测试类中使用了2个 PHPUnit 方法:
// Erase output buffer before starting the tests
public static function setUpBeforeClass(){
ob_clean();
}
// Turn off output buffering after the tests
public static function tearDownAfterClass(){
ob_end_clean();
}