Я использую 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?