PHPUnit test Autentizace – headers already sent

- thonzak
 - Člen | 7
 
Dobrý večer,
pokouším se napsat si unit test na vlastní implementaci autentizační třídy.
Když zavolám v test case rovnou
<?php
	$object->authenticate($credentials);
?>
unit test projde.
Když se ale pokusím v test case přihlásit via
<?php
	$user->login($login, $password)
?>
dostanu InvalidStateException a hlášku
MyIdentityTest::testAuthenticate()
Cannot send session cache limiter - headers already sent (output started at
/usr/share/php/PHPUnit/Util/Printer.php:173)
Prakticky tentýž kód v presenteru funguje bez problémů.
Nějaký nápad, co dělám špatně?
Díky
TH
Testy:
<?php
	public function testAuthenticate() {
		$user = new User;
		$login = 'login';
		$pass = 'pass';
		try {
			$user->login($user, $pass);
		} catch ( Exception $E ) {
			// odchytí InvalidStateException ...
			$this->fail($E->getMessage());
		}
	}
	// (...) funguje podle očekávání (...)
	public function testRawAuthenticate() {
		$login = 'login';
		$pass = 'pass';
		$credentials = array('username' => $login, 'password' => $pass);
		$identity = $this->object->authenticate($credentials);
?>
Presenter:
<?php
final class HomePagePresenter extends BasePresenter
{
	// (...) funguje podle očekávání (...)
	public function renderDefault() {
		$user = Environment::getUser();
		if ( ! $user->isLoggedIn()) {
			$user->login('login', 'pass');
		}
		$this->template->user = $user;
	}
}
?>
					Editoval thonzak (9. 8. 2010 21:25)

- Panda
 - Člen | 569
 
Stejný problém, jako se občas vyskytne na webu.
$user->login($login, $password);
startuje session, ale v momentě, kdy Ti test probíhá, už PHPUnit vypsal výstup (minimálně informaci o verzi) a pokus o „odeslání“ hlavičky s cookie neprojde.
Pokus se v bootstrapu pro PHPUnit nastartovat session pomocí
Environment::getSession()->start();.

- thonzak
 - Člen | 7
 
Aha, jasný. Díky. Zas jsem o něco chytřejší ;-)
Nastartování session v bootstrapu pomohlo, ale třída User si po
úspěšném loginu vyžádá nové session id, a jsem stejně v háji :-)
Cannot regenerate session ID...
Jako zas až tak extrémně mne to nepálí (resp. otestuju si to stejně přes selenium via login form), a konec konců pro unit test by mělo být pokrytí voláním authenticate() adekvátní, takže asi netřeba dál řešit – pokud ovšem není nějaké triviální řešení, které zase nevidím.
Každopádně ještě jednou děkuju za bleskový a přesný support!
TH