我正在尝试对我的控制器(Yii 框架)进行单元测试。
/**
* @dataProvider provider
*/
public function testActionEdit_view_login($controller){
$user = new CWebUser;
$user->id = 978;
$identity = new UserIdentity('[email protected] /cdn-cgi/l/email-protection', '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()中。
我仍然收到标头已发送的消息。文件中没有空格或换行符,当我注释掉具体的测试方法时,它工作得很好。 login() 似乎导致了这个问题。
有人知道如何防止这种情况/也许对控制器进行不同的单元测试吗?
谢谢,
B先生
在您致电之前$user->login
,添加以下代码:
$mockSession = $this->getMock('CHttpSession', array('regenerateID'));
Yii::app()->setComponent('session', $mockSession);
这会覆盖regenerateID
方法与不执行任何操作的方法。
Adding ob_start()
引导程序也可以工作,但是在一切完成之前 PHPUnit 没有输出。
使用这种方法,您仍然可以看到正在发生的进度。
我从 Yii 1.1.7 升级到 1.1.10 并且regenerateID
方法是在1.1.8中添加的,所以今天我得到了这个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)