Nette\Tester, chybějící PDO, php skrz CLI
- kedrigern
- Člen | 102
Zdravím,
Nette\Tester jsem zprovoznil a používám ho obdobně jako je tomu u testů ve frameworku.
Snažil jsem se připravit i základní integrační testy. Nicméně
dostávám hlášku:
Class 'PDO' not found in <b>/var/www/sandbox/tests/UserManager/connect.inc.php
Testy spouštím:
php libs/nette/tester/Tester/tester.php tests/
Když zadám (phpinfo pro cli):
php -i | grep "PDO"
Dostanu:
PDO
PDO support ⇒ enabled
PDO drivers ⇒ mysql, pgsql
PDO Driver for MySQL ⇒ enabled
PDO Driver for PostgreSQL ⇒ enabled
Když najdu konfigurák:
php -i | grep "Loaded Configuration File"
Tak dostanu cestu:
/etc/php5/cli/php.ini
Když tam přidám řádky:
extension=pdo.so
extension=php_pdo_mysql.so
tak php hlásí, že se pdo snažím načítat podruhé.
Skutečně už nevím, jak bych měl víc ověřit, že php z konzole PDO má.
Udělal jsem experiment. Připravil jsem si soubor
tests/db.phpt
:
<?php
if(! extension_loaded("PDO") ) {
throw new \Exception("Chybí PDO");
} else {
throw new \Exception("OK");
}
Pokud ho spustím:
`php tests/db.phpt `, tak vyhodí výjimku OK.
Pokud ho spustím (tedy přes tester.php):
php libs/nette/tester/Tester/tester.php tests/db.phpt
, tak dostanu,
že chybí PDO.
Vše zkouším na:
- nette/sandbox skrz composer
- nette/tester skrz composer (@dev)
- tester.php má v hlavičce version 0.9-dev
- PHP 5.4.6–1ubuntu1.2
- Ubuntu 12.10
- Majkl578
- Moderator | 1364
Už na chatu jsem ti psal, že některé distribuce rozlišují
konfigurační soubory pro CLI, CGI a Apache 2 Handler. Nette spouští testy
jako CGI, ale ty nejspíš prohlížíš konfiguraci (a edituješ konfigurák)
pro CLI. Zkus editovat ten pro CGI (/etc/php5/cgi/php.ini
?). Pak by
to mělo fungovat správně.
- Milo
- Nette Core | 1283
Pro Tester je nejlepší vytvořit si vlastní php.ini a předávat ho přes parametr -c.
php libs/nette/tester/Tester/tester.php -c php.ini tests/db.phpt
Edit: A pro hledání takovéto chyby se hodí do testu dát:
ob_start();
phpinfo();
file_put_contents('/temp/phpinfo.html', ob_get_clean());
Editoval Milo (26. 4. 2013 9:30)
- kedrigern
- Člen | 102
Děkuji.
Ten parametr -c jsem předtím také zkoušel, ale hloupě u toho prvního php, kde neměl vliv. Teď jsem ho dal správně a už vše jde:
php libs/nette/tester/Tester/tester.php -s -c /etc/php5/apache2/php.ini tests/
Teď už se to chová dle mých představ. Moc všem děkuji za trpělivost.
Editoval kedrigern (26. 4. 2013 10:06)
- kedrigern
- Člen | 102
Děkuji, to je také užitečná rada.
Ještě se zeptám, testy mi vypisují chyby např. takto:
-- FAILED: /var/www/sandbox/tests/UserManager/NanTest.phpt | tests/UserManager/NanTest.phpt
Fatal error (code 255)-- FAILED: skip | sandbox/tests/FailTest.phpt
Fatal error (code 255)
Viděl jsem nějaké rozšíření pro zobrazení čísla řádku, kde chyba nastala. Ale mě by docela zajímala i konkrétní chyba (např. zda něco selhalo, či je špatný typ proměnné) a tak. To lze nějak nastavit?
Resp. pokud nezadám ten config z Apache, ale nechám ten default php-cgi, tak to vyplivne např.:
-- FAILED: /var/www/sandbox/tests/UserManager/NanTest.phpt | tests/UserManager/NanTest.phpt
<br />
<b>Fatal error</b>: Uncaught exception ‚Exception‘ with message ‚ahoj‘ in /var/www/sandbox/tests/UserManager/NanTest.phpt:11
Stack trace:
#0 {main}
thrown in <b>/var/www/sandbox/tests/UserManager/NanTest.phpt</b> on line <b>11</b><br />
Lze vydolovat nějako střední cestu? Ten code 255 je fakt málo.
- kedrigern
- Člen | 102
Skvěle! Nejen, že to hlásí přesněji, ale dokonce to teď začalo
hlásit i interní chyby (např. jsem špatně definoval u integračních
testů tmp
adresář, předtím to prošlo, teď mě to
upozornilo :-)).
Jen pro info, teď to vypadá takto:
Nette Tester (v0.9)
PHP 5.4.6–1ubuntu1.2 | ‚php-cgi‘ -c ‚/etc/php5/apache2/php.ini‘
..F.......
-- FAILED: skip | sandbox/tests/FailTest.phpt
Failed asserting that FALSE is TRUE
in Tester/Framework/Assert.php(211)
in Tester/Framework/Assert.php(88)
in sandbox/tests/FailTest.phpt(32)
in Tester/Framework/TestCase.php(69)
in Tester/Framework/TestCase.php(54)
in sandbox/tests/FailTest.phpt(38)FAILURES! (10 tests, 1 failures, 0 skipped)
- kedrigern
- Člen | 102
Kdyby to někomu k něčemu bylo (třeba lidem, kteří tápají jako já
minulý týden), tak jsem sepsal základní testy pro nette/sandbox
(trochu jsem ho rozšířil, aby bylo co testovat).
https://github.com/…ern/sandbox/
(Samozřejmě připomínky rád uvítám.)