Yii2 Codeception:运行 个人套件时如何擦除数据库?

Yii2 Codeception: How to wipe database when running individual suites?

在 运行 单个套件(例如 "backend")时,如何擦除 yii2-app-advanced 模板中的数据库?例如:

./vendor/bin/codecept run -- -c backend

(注:此方法为officially documented。)

我正在尝试创建一些单元测试,其中记录作为测试的一部分插入。这些记录对某些属性有 unique 约束。这些测试在第一个 运行 上正确通过,但如果我再次 运行 相同的命令,它将失败(因为数据库没有被擦除并且之前 运行 的记录仍然存在)。

有趣的是,如果我 运行 使用以下命令一次进行所有测试(后端 + 通用 + 前端):

./vendor/bin/codecept run

然后一切都会 运行 正常,因为数据库实际上已经被清除了。

您的测试应该会自行清理。您可以使用 _before()_after() 方法来确保每次测试执行前后的数据库状态。

protected function _before() {
    parent::_before();
    Yii::$app->db->createCommand()->truncateTable('{{%my_table}}');
}

protected function _after() {
    Yii::$app->db->createCommand()->truncateTable('{{%my_table}}');
    parent::_after();
}

您也可以尝试使用 setUpBeforeClass()tearDownAfterClass() 仅触发一次 before/after 所有 class 测试执行的事件。

刚刚找到解决方案。原来 yii2-advanced-app 文档是 incorrect/incomplete/outdated.

个别套房应该是运行这样的:

./vendor/bin/codecept run -c backend

区别在于省略了双破折号 (--)。 现在一切正常,并且在每个 运行.

之后正确擦除数据库