session_regenerate_id () - заголовки, уже отправленные в юнит-тестирование контроллера Yii - PullRequest
6 голосов
/ 20 июля 2011

Я пытаюсь протестировать мой контроллер (фреймворк 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 ().

У кого-нибудь есть идеи, как предотвратить это / может быть, модульное тестирование контроллера по-другому?

Спасибо, МРБ

Ответы [ 2 ]

4 голосов
/ 18 июля 2012

Перед вызовом $user->login добавьте следующий код:

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

Это перезаписывает метод regenerateID методом, который ничего не делает.

Добавление ob_start() взагрузчик также работает, но PHPUnit не выводит до тех пор, пока все не будет завершено.

С помощью этого метода вы по-прежнему можете видеть, как происходит процесс.

Я обновился с Yii 1.1.С 7 по 1.1.10 и метод regenerateID был добавлен в 1.1.8, поэтому я получил эту ошибку сегодня.

2 голосов
/ 20 июля 2011

Понял. Я включил несколько файлов Yii перед ob_start (), которые, кажется, напечатали заголовки. Теперь я тоже это буферизирую.

...