Nette\Tester: Spouštění testů v prohlížeči

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nanuqcz
Člen | 822
+
0
-

Ahoj,
jakým způsobem lze spouštět testy v prohlížeči? Jde mi o to, abych mohl v průběhu testování používat i debug bar laděnky apod.

Například testo test:

Assert::equal(1, "1");
Assert::true( FALSE );
Assert::true( TRUE );
Debugger::barDump( $a = array(1, 2, 3) );

by mi měl do prohlížeče vypsat shrnutí, že dva asserty proběhly v pořádku, jeden failnul. A měl by se mi zobrazit debug bar s obsahem proměnné $a.

Díky moc, nemůžu na to přijít.

Editoval nanuqcz (3. 4. 2014 13:43)

Milo
Nette Core | 1283
+
0
-

Pro detekci, jestli je test spuštěn Testerem anebo ne, slouží proměnná prostředí Environment::RUNNER a pro zpracování chybných asercí Assert::$onFailure. Takže to nějak zkombinovat.

if (getenv(Tester\Environment::RUNNER)) {
	Tracy\Debugger::enable();

	# Tímto se AssertException nevyhodí, ale máš ji tady k dalšímu zpracování
	Tester\Assert::$onFailure = function(Tester\AssertException $e) {
		...
	}
} else {
	Tester\Environment::setup();
}

Nevím, k čemu je dobré zjisti počet úspěšných asercí. Teď to snadno nepůjde. Podle mě je síla ve vyhození výjimky a proklikání se skrz ní v laděnce. Ale neznám Tvůj use-case.

Editoval Milo (3. 4. 2014 17:18)

David Grudl
Nette Core | 8218
+
0
-

Počet assertů je v Tester\Assert::$counter a počet chybných spočítáš v obsluze Tester\Assert::$onFailure.

nanuqcz
Člen | 822
+
0
-

Moc díky, tohle už mi funguje :-)

include 'libs/Nette/nette.phar';
include 'libs/Tester/bootstrap.php';

use Nette\Diagnostics\Debugger;
Debugger::enable(Debugger::DEVELOPMENT);


$GLOBALS['_tester']['failCount'] = 0;
Tester\Assert::$onFailure = function($e) {
	$trace = $e->getTrace();
	echo $e->getMessage() . "\n    in " . $trace[1]['file'] . "\n\n";

	$GLOBALS['_tester']['failCount']++;
};


// Run tests
echo '<pre>';

$files = Nette\Utils\Finder::findFiles('*.phpt')->in('tests');
foreach ($files as $filePath => $file) {
	include "$filePath";
}

echo "\n\nTests finished, " . Tester\Assert::$counter . " asserts, " . $GLOBALS['_tester']['failCount'] . " failed.";

Kromě neznalosti Assert::$counter a Assert::$onFailure jsem měl problém hlavně v tom, že jsem první volal Debugger::enable(), a až pak includoval Tester/bootstrap.php. Což nefungovalo :-)