我知道有很多类似的问题(Codeception&Symfony-在测试之前运行Doctrine迁移),但我真的需要像exec(...)
那样在测试中运行迁移吗?还是有更好的方法来做到这一点?
另外一件事:当我尝试为sqlite
数据库运行迁移时,我会收到一个错误消息:Migration can only be executed safely on mysql
这是我的工作代码,适用于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']);
}
}
您可以在控制台中输入以下命令:
php bin/console doctrine:schema:update --dumpsql (检查整个请求) php bin/console doctrine:schema:update --force (执行请求)
来源:https://symfony.com/doc/3.4/doctrine.html(适用于Symfony 4)
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
如果您确定该迁移可以在其他平台上运行,您可以删除此行。 - Perry