Nefungující dibi v testech

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

Zdravím,

snažím se zapracovat (nejen) Unit testování do své aplikace a to stejným způsobem jako Dundee – viz https://github.com/…ing-showcase. Potíž je v tom, že se mi nějak nedaří používat v těch testech dibi.

Takhle vypadá můj config.neon:

common:
    parameters:
        selenium:
            host: localhost
            browser: firefox
            browserUrl: http://localhost/

    php:
        date.timezone: Europe/Prague
        # session.save_path: "%tempDir%/sessions"
        # zlib.output_compression: yes

    nette:
        session:
            autoStart: smart
            expiration: +14 days

        debugger:
            strictMode: true

        application:
            errorPresenter: 'Error'

    dibi:
        driver: mysqli
        host: localhost
        charset: utf8
        lazy: true
        profiler: true

    services:
        authenticator: Authenticator()
        cacheStorage: \Nette\Caching\Storages\FileStorage(%tempDir%)
        # for testing
        database:
            @dibi.connection
        category:
            class: Category(@dibi.connection)

    factories:

production < common:

development < common:
    includes:
        - devel.neon

Test pak vypadá nějak takto:

class ExampleTest extends PHPUnit_Framework_TestCase {
	public function testExample(){
		$db = \Nette\Environment::getContext()->database;
		$db->query(...); // tohle nefunguje
	}
}

PHP (resp PHPUnit) zakříčí Error:

1) ExampleTest::testExample
DibiDriverException: No such file or directory

/Users/Vojta/Documents/web/appshop/libs/dibi/drivers/mysqli.php:116
/Users/Vojta/Documents/web/appshop/libs/dibi/libs/DibiConnection.php:163
/Users/Vojta/Documents/web/appshop/libs/dibi/libs/DibiConnection.php:325
/Users/Vojta/Documents/web/appshop/libs/dibi/libs/DibiConnection.php:261
...

Přitom pokud někde v presenteru zavolám \Nette\Environment::getContext()->database->query(""), tak to bez problémů funguje.

Rád bych se tedy dozvěděl jak elegantně dostat fungující dibi do testů (aniž bych přešel na dibi::). Chci s ním za a) rovnou provádět dotazy a za b) předat ho do konstruktoru modelu, který budu testovat.

Struktura souborů odpovídá přesně tomu od Dundee. On však používá Nette\Database…

A druhý dotázek, jak elegantně zamezit při testování tomu, aby se v bootstrapu zavolalo $container->application->run(); (Lze to řešit jen zcela oddělenými bootstrapy?)

Díky za pomoc!

Editoval tajo (19. 7. 2012 18:53)

tajo
Člen | 20
+
0
-

Problém vyřešen. Ukázka výše je v pořádku a funguje.

Problém byl v tom, že PHPUnit používal jiné PHPčko než můj projekt. (Aneb XAMPP už na Mac nikdy víc). Tudíž si k té databázi nemohl ani čuchnout.
A druhý zádrhel byl v komunikaci mezi PHP a MySQL (nastavení v /etc/php.ini mysql.default_socket bylo potřeba změnit z /var/mysql/mysql.sock na /tmp/mysql.sock a to samé i pro mysqli.- a pdo.-)
Aneb příjemně strávený víkend.