コントローラー(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()に入れます。
それでも、ヘッダーがすでに送信されているというメッセージが表示されます。ファイルにスペースや改行はありません。特定のテスト方法をコメントアウトすると、完全に機能します。login()が問題を引き起こしているようです。
誰かがこれを防ぐ方法/多分コントローラーを別の方法でユニットテストする方法を知っていますか?
ありがとう、MrB