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
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ě?
- Myiyk
- Člen | 321
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.
- motorcb
- Člen | 552
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
@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)