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

问题描述 投票:1回答:2

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

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

(注意:这种方法是officially documented。)

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

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

./vendor/bin/codecept run

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

unit-testing yii2 yii2-advanced-app codeception
2个回答
1
投票

你的测试应该自行清理。您可以使用_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()在所有类测试执行之前/之后仅触发一次事件。


1
投票

刚刚找到解决方案。事实证明,yii2-advanced-app文档不正确/不完整/过时。

单个套件应该像这样运行:

./vendor/bin/codecept run -c backend

区别在于省略了双击(--)。现在一切正常,每次运行后都可以正确擦除数据库。

© www.soinside.com 2019 - 2024. All rights reserved.