Dotaz na ladění testů v Testeru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Šaman
Člen | 2659
+
+2
-
  1. Tester potřebuje vlastní php.ini soubor. Nejde mi v něm ale jednoduše přidat extenze, musím nejprve zadat adresář. Tím se ale test stane nepřenosný. Jak tohle řešíte?
[PHP]
extension_dir="C:\xampp\php\ext"
extension=php_ldap.dll
  1. Jak ladit testy? Při psaní testů mi vyskakují zatím chyby častěji, než při psaní kódu. Ale v kódu mám k dispozici laděnku, zatímco v testech jen problematicky zjišťuji, kde je chyba (a už jsem viděl chyby od nenačtené extenze, přes kolize v configu, až po překlepy).
  2. Souvisí trochu s bodem 2. Jak nastavit logování? Pokud nastavím $configurator->enableDebugger(__DIR__ . '/log');, tak sice v logu mám co potřebuji, ale output testu mám zaneřáděný html chybovou hláškou (i s debugMode = FALSE).
Jan Tvrdík
Nette guru | 2595
+
+2
-
  1. Máme v repositáři verzované soubory php-unix.sample.ini a php-windows.sample.ini. Pro běh testů se používá neverzovaný soubor php.ini. Přenositelné php.ini udělat nejde, protože netušíš, jak bylo PHP zkompilováno (podle toho může nebo nemusí být dané rozšíření potřeba načíst).
  2. Pokud nejsem schopen na první pohled poznat, kde je problém, tak pouštím debugger. Pouštím ho často =)
  3. Tracy vůbec nechceš v testech zapínat. Kdysi jsem to dělal dost často, než jsem přišel na to, že debugger je většinou lepší řešení.

Ještě možná trochu rozvedu ten bod (2). Pokud failne test v konzoli, otevřu si ho v PhpStormu. Tam si ho znova spustím a nechám failnout. Protože v PhpStormu pouštím test přímo (tj. ne přes Tester), tak uvidím trochu jiný výstup. Většinou přidám pár volání dump() (na to není potřeba zapnutá Tracy!), zakomentuji nesouvisející věci (abych problém lépe izoloval) a chybu vyřeším. Pokud ne, tak pouštím test znovu s debuggerem.

Šaman
Člen | 2659
+
0
-

Díky.

Ještě k tomu ladění: Používám NetBeans a jeho formátování dumpů v testech není o moc lepší, než konzole. Ale vypadá to, že pomáhá spuštění testu přímo v prohlížeči, pak si mohu dumpovat dle libosti. Jen bylo potřeba nastavit Apache, aby mi .phpt soubory zpracoval pomocí php.

<IfModule mime_module>
	AddHandler application/x-httpd-php .phpt
</IfModule>
Šaman
Člen | 2659
+
0
-

Update:
Tak to vypadá, že je možné nastavit Tracy při spuštění v browseru a defaultně ji mít vypnutou. Takže když vůbec netuším, proč mi test neprojde (tj. netuším ani jestli se mi sestavil container, jestli jsem připojený ke správné službě, nebo jestli jde o triviální překlep), spustím ho přímo v prohlížeči a mám k dispozici všechno jak jsem zvyklý. Hurá – bez toho jsem si připadal jako pavouk, kterému utrhali sedm nožiček… Dokonce mě to donutilo nainstalovat xdebug :) Ale zvyk je železná košile a Tracy je fakt sexy holka. Ty dvě noci bez ní byly peklo. Zobrazí se i panel, takže mám přehledně dumpnutý DIC. Tyhle věci jsem v xdebugu moc nedával.

# bootstrap.php pro testy
if (getenv(Tester\Environment::RUNNER)) {
	# Running by Tester (e.g. vendor/bin/tester tests/MyTest.phpt)
	$configurator->setDebugMode(FALSE);
} elseif (PHP_SAPI === 'cli') {
	# Running as ordinary CLI script (e.g. php tests/MyTest.phpt)
	$configurator->setDebugMode(FALSE);
} else {
	# Browser
	$configurator->setDebugMode(TRUE);
	$configurator->enableDebugger();
}

(Řešení by @Milo. Díky.)


Kapitánův dodatek: Dokonce to vypadá, že mohu v testech nechat barDumpy. Při ladění v prohlížeči se hodí a při běžném spuštění se vůbec na výstup nedostanou.

Editoval Šaman (2. 5. 2016 19:08)

Pavel Kravčík
Člen | 1195
+
0
-

@Šaman: Hustý. Jsem to zkusil a za pár sekund člověk může v Netbeans projíždět testy rovnou při psaní. :) Moc pěkná věc, tohle by mi nenapadlo. Díky.