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
区别在于省略了双破折号 (--
)。
现在一切正常,并且在每个 运行.
之后正确擦除数据库
在 运行 单个套件(例如 "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
区别在于省略了双破折号 (--
)。
现在一切正常,并且在每个 运行.