gpt4 book ai didi

session_regenerate_id() - 已在单元测试 Yii Controller 中发送的 header

转载 作者:行者123 更新时间:2023-12-02 20:43:08 26 4
gpt4 key购买 nike

我正在尝试对我的 Controller (Yii 框架)进行单元测试。

/** 
* @dataProvider provider
*/
public function testActionEdit_view_login($controller){
$user = new CWebUser;
$user->id = 978;
$identity = new UserIdentity('me@test.com', '123456');
$user->login($identity);
$controller->actionEdit();

$output = ob_get_contents();
assertContains('Add/Change Profile Picture:', $output);
assertContains('bio', $output);
assertContains('specialties', $output);
assertContains('change login', $output);
assertContains('New Password', $output);
}

当我这样做的时候

$user->login($identity);

为了登录,我收到以下错误:

session_regenerate_id(): Cannot regenerate session id - headers already sent

我已经尝试通过将其放在类的开头来缓冲输出:

public static function setUpBeforeClass(){
ob_start();
}

我还将 ob_clean() 放在 setUp() 中,将 ob_end_clean() 放在tearDownAfterClass() 中。

我仍然收到 header 已发送的消息。文件中没有空格或换行符,当我注释掉具体的测试方法时,它工作得很好。 login() 似乎导致了这个问题。

有人知道如何防止这种情况/也许以不同的方式对 Controller 进行单元测试吗?

谢谢,B先生

最佳答案

在调用 $user->login 之前,添加以下代码:

$mockSession = $this->getMock('CHttpSession', array('regenerateID'));
Yii::app()->setComponent('session', $mockSession);

这会使用不执行任何操作的方法覆盖 regenerateID 方法。

ob_start() 添加到 Bootstrap 也可以,但在一切完成之前 PHPUnit 不会输出。

使用此方法,您仍然可以看到正在发生的进度。

我从 Yii 1.1.7 升级到 1.1.10,并且在 1.1.8 中添加了 regenerateID 方法,所以今天遇到了这个错误。

关于session_regenerate_id() - 已在单元测试 Yii Controller 中发送的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6756021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com