gpt4 book ai didi

php - Codeception & Symfony - 在测试之前运行 Doctrine 迁移

转载 作者:行者123 更新时间:2023-12-02 02:33:45 25 4
gpt4 key购买 nike

我有一个 Symfony 4 应用程序和带有 Doctrine 迁移的 Doctrine。我将引入 Codeception 来运行 API 测试,并且需要在测试运行之前运行迁移。因为我正在使用Doctrine2 module我真的不想也包括 DB module因为测试不需要它,并且需要在两个不同的位置配置测试数据库。

我正在使用Symfony module目前,我注意到 Laravel module有一个 run_database_migrations 配置选项。

在测试之前在 Symfony 应用程序中处理运行 Doctrine 迁移命令的最佳方法是什么? (bin/console 主义:migrations:migrate -n 为具体命令)。

<小时/>

编辑我有一个解决方案,尽管它有效,但远非理想。通过使用Codeception Customisation我创建了以下扩展,基本上手动exec底层 Symfony 命令。

class DatabaseMigrationExtension extends Extension
{
public static $events = [
Events::SUITE_BEFORE => 'beforeSuite',
];

public function beforeSuite(SuiteEvent $e)
{
echo(exec('bin/console doctrine:database:drop --force') . PHP_EOL);
echo(exec('bin/console doctrine:database:create') . PHP_EOL);
echo(exec('bin/console doctrine:migrations:migrate -n') . PHP_EOL);
}
}
<小时/>

编辑 2 其目标基本上是复制与 Codeception DB 模块类似的功能,它允许您提供在测试中自动使用的数据库的 SQL 转储,但是相反,使用 Doctrine 迁移来处理数据库。 -https://codeception.com/docs/modules/Db#sql-data-dump

最佳答案

我花了一段时间尝试了几种不同的方法来实现这一目标。我最初使用RunProcess然而,尽管使用了 sleep 配置,但这似乎会导致数据库被删除且未重新创建的偶发问题。我最终只是更新了现有的扩展以使用 CLI 模块,并且它可以按需要工作(无需创建脚本或运行多个命令)并且无需使用 exec

最终扩展;

class DatabaseMigrationExtension extends Extension
{
public static $events = [
Events::SUITE_BEFORE => 'beforeSuite',
];

public function beforeSuite()
{
try {
/** @var \Codeception\Module\Cli $cli */
$cli = $this->getModule('Cli');

$this->writeln('Recreating the DB...');
$cli->runShellCommand('bin/console doctrine:database:drop --if-exists --force');
$cli->seeResultCodeIs(0);
$cli->runShellCommand('bin/console doctrine:database:create');
$cli->seeResultCodeIs(0);

$this->writeln('Running Doctrine Migrations...');
$cli->runShellCommand('bin/console doctrine:migrations:migrate --no-interaction');
$cli->seeResultCodeIs(0);

$this->writeln('Test database recreated');
} catch (\Exception $e) {
$this->writeln(
sprintf(
'An error occurred whilst rebuilding the test database: %s',
$e->getMessage()
)
);
}
}
}

并注册;

// codeception.yml
extensions:
enabled:
- \DatabaseMigrationExtension

输出(-vv 或更高版本还显示数据库和迁移命令的输出);

关于php - Codeception & Symfony - 在测试之前运行 Doctrine 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50030643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com