Как перенести базу данных Doctrine в память перед тестами PHPUnit? - PullRequest
0 голосов
/ 08 ноября 2019

Я использую Doctrine DBAL и хочу проверить (с помощью PHPUnit) свои репозитории, используя базу данных sqlite в памяти. Так как он находится в памяти, мне нужно запустить миграцию перед тестами.

В Laravel вы можете сделать это легко, включив признак RefreshDatabase в ваш тестовый класс.

Перед переключением на DoctrineDBAL Я использовал Doctrine ORM и смог настроить базу данных из моих тестов следующим образом:

self::$entityManager = EntityManagerFactory::getEntityManager();

$metadatas = self::$entityManager->getMetadataFactory()->getAllMetadata();
$schemaTool = new SchemaTool(self::$entityManager);
$schemaTool->updateSchema($metadatas);

Я поместил это в некоторый базовый класс DoctrineORMRepositoryTestCase, чтобы каждый отдельный класс теста репозитория унаследовался от него. и база данных всегда настраивалась до запуска тестов.

Я не нашел способа сделать это с помощью Doctrine DBAL. Я попытался запустить

exec('/path/to/vendor/bin/doctrine-migrations migrate --no-interaction')

из моего тестового класса, и в консоли появляется сообщение ++ 1 sql queries, которое звучит так, как будто оно успешно перенесено (в настоящее время у меня есть только 1 класс миграции), но затем всемои тесты завершаются неудачно с сообщением no such table....

Как я могу запустить миграции Doctrine DBAL из моих тестов PHPUnit?

...