2011-07-20 11 views
5

Próbuję przetestować mój kontroler (framework Yii).session_regenerate_id() - nagłówki już wysłane w testowaniu jednostkowym Kontroler Yii

/** 
    * @dataProvider provider 
    */ 
    public function testActionEdit_view_login($controller){ 
    $user = new CWebUser; 
    $user->id = 978; 
    $identity = new UserIdentity('[email protected]', '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); 
    } 

Kiedy zrobić

$user->login($identity); 

w celu logowania, pojawia się następujący błąd:

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

Ja już próbowałem buforowania wyjścia poprzez umieszczenie tego na początku klasa:

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

Umieszczam również ob_clean() w setUp() i ob_end_clean() w tearDownAfterClass().

Nadal dostaję komunikat, że nagłówki zostały już wysłane. W pliku nie ma żadnych spacji ani znaków nowego wiersza, a kiedy wypowiadam się na temat konkretnej metody testowania, działa idealnie. Login() wydaje się powodować problem.

Ktoś ma pomysły, jak temu zapobiec/może przetestować sterownik w inny sposób?

Dzięki MRB

Odpowiedz

2

Rozumiem. Dołączyłem trochę plików Yii przed ob_start(), które zdają się drukować nagłówki. Teraz też to buforuję.

+0

Jak to znalazłeś? Utknąłem z tym samym problemem, ale nie widzę nigdzie, że dodałem pliki. – Hippyjim

3

Przed wezwanie do $user->login dodaj następujący kod:

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

ta nadpisuje metodę regenerateID ze sposobu, który nic nie robi.

Dodanie ob_start() do bootstrap również działa, ale nie ma wyjścia z PHPUnit, dopóki wszystko nie zostanie zakończone.

Dzięki tej metodzie nadal widać postępy w działaniu.

Uaktualniłem z wersji 1.1 1.1 do 1.1.10 Yii i dodano metodę regenerateID w wersji 1.1.8, więc otrzymałem ten błąd dzisiaj.

Powiązane problemy