运行单个套件(例如“后端”)时,如何在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()
在所有类测试执行之前/之后仅触发一次事件。
刚刚找到解决方案。事实证明,yii2-advanced-app文档不正确/不完整/过时。
单个套件应该像这样运行:
./vendor/bin/codecept run -c backend
区别在于省略了双击(--
)。现在一切正常,每次运行后都可以正确擦除数据库。