session_regenerate_id() - 已经在单元测试Yii控制器中发送的头文件

MrB*_*MrB 6 session output-buffering yii

我正在尝试对我的控制器(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);
  }
Run Code Online (Sandbox Code Playgroud)

当我做

$user->login($identity);
Run Code Online (Sandbox Code Playgroud)

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

session_regenerate_id(): Cannot regenerate session id - headers already sent
Run Code Online (Sandbox Code Playgroud)

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

public static function setUpBeforeClass(){
  ob_start();
}
Run Code Online (Sandbox Code Playgroud)

我还将ob_clean()放在tearUownAfterClass()中的setUp()和ob_end_clean()中.

我仍然收到标题已发送的消息.文件中没有空格或换行符,当我注释掉特定的测试方法时,它完美地运行.login()似乎导致了问题.

任何人都有想法如何防止这个/可能以不同方式对控制器进行单元测试?

谢谢,MrB

MrB*_*MrB 2

知道了。我在 ob_start() 之前包含了一些 Yii 文件,它们似乎已经打印了标题。现在我也缓冲它。