我正在使用 Doctrine DBAL 并想使用内存中的 sqlite 数据库测试(使用 PHPUnit)我的存储库。由于它在内存中,我需要在测试之前运行迁移。
在 Laravel 中,您可以通过在测试类中包含 RefreshDatabase 特征来轻松完成此操作。
在切换到 Doctrine DBAL 之前,我使用的是 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...
。
如何从我的 PHPUnit 测试中运行我的 Doctrine DBAL 迁移?