Jak v testu inicializovat databázi?

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

Zdravím,
vyčetl jsem doporučení inicializovat databázi

function setUp()
{
    $this->container->getService('database')->loadFile(__DIR__.'/../initialization.sql');
}

Ale tento kód mi hlásí chybu:

-- FAILED: Sandbox\tests\ExampleTest.phpt
   Exited with error code 255 (expected 0)
   Nette\DI\MissingServiceException: Service 'database' not found.

Tester v1.2
Co dělám špatně?

CZechBoY
Člen | 3608
+
0
-

Máš v config.neon službu database?

Myiyk
Člen | 321
+
0
-

Nejspíš nemáš nastavenou sekci ‚database‘

nette:
	database:
		dsn: 'mysql:host=127.0.0.1;dbname=test'
		user:
		password:
		options:
			lazy: yes

Dále je nutné testy, kde se používá databáze serializovat (půjdou postupně, ne současně), aby se nerušily navzájem.

Tento kód dej do kažého testu databáze do metody __construct.

Tester\Helpers::lock('db', 'cesta/kde/se/zamek/ulozi');

Upozorňuji, že při zpracování SQL z celého souboru najednou, se nedozvíš chybu, která by nastala. Je to bug v PDO.

nanuqcz
Člen | 822
+
+1
-

Nevím, jak je to v aktuálním nejnovějším Nette, ale k databázi se vždycky dostávalo přes

->getService('nette.database.default')
motorcb
Člen | 552
+
0
-

Díky, dostal jsem se dál:

	function setUp()
	{
		$this->container->getService('nette.database.default')->loadFile(__DIR__.'/initialization.sql');
	}

vrací chybu:

-- FAILED: tests\Database\CreateDatabaseTest.phpt
   Exited with error code 255 (expected 0)
   Nette\MemberAccessException: Call to undefined method Nette\Database\Connection::loadFile().
nanuqcz
Člen | 822
+
0
-

@motorcb NetteDB nemá metodu loadFile(), viz API: https://api.nette.org/…Context.html.

Zkus místo toho metodu query():

$this->container->getService('nette.database.default')
	->query( file_get_contents(__DIR__.'/initialization.sql') );

Editoval nanuqcz (18. 8. 2014 13:05)