Symfony 4 - 如何在测试之前运行Doctrine迁移?

3

我知道有很多类似的问题(Codeception&Symfony-在测试之前运行Doctrine迁移),但我真的需要像exec(...)那样在测试中运行迁移吗?还是有更好的方法来做到这一点?

另外一件事:当我尝试为sqlite数据库运行迁移时,我会收到一个错误消息:Migration can only be executed safely on mysql


1
关于这个消息,在您的迁移文件中,您有这行代码:$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); 如果您确定该迁移可以在其他平台上运行,您可以删除此行。 - Perry
2个回答

1

这是我的工作代码,适用于sf 6.0。只需实现即可。

abstract class AbtractWithMigrationTestCase extends KernelTestCase
{
    protected function setUp(): void
    {
        $kernel = self::bootKernel(['environment' => 'test']);
        $application = new Application($kernel);
        $command = $application->find('doctrine:migrations:migrate');
        $commandTester = new CommandTester($command);
        $commandTester->execute(['n']);
    }
}

对于数据库配置,请设置一个.env.test文件,在其中配置一个mysql数据库。(使用SQLite的Mysql迁移查询将失败)。我已经设置了一个挂载在ramfs上的docker mysql服务器,速度非常快。 - Xmanoux

0

您可以在控制台中输入以下命令:

php bin/console doctrine:schema:update --dumpsql (检查整个请求) php bin/console doctrine:schema:update --force (执行请求)

来源:https://symfony.com/doc/3.4/doctrine.html(适用于Symfony 4)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接