【发布时间】:2013-10-06 04:44:18
【问题描述】:
在每次测试开始时截断数据库的最佳解决方案是什么?我有带外键的 InnoDB 引擎,yii 不能截断表。
【问题讨论】:
标签: php unit-testing yii phpunit
在每次测试开始时截断数据库的最佳解决方案是什么?我有带外键的 InnoDB 引擎,yii 不能截断表。
【问题讨论】:
标签: php unit-testing yii phpunit
如果您扩展 CDbTestCase 并使用内置的 public $fixtures 属性来指定您的夹具文件,它将自动处理。
但是,如果您构建了自己的夹具生成系统,或者想要截断表格,则可以使用以下内容。
$this->getFixtureManager()->checkIntegrity(false);
$this->getFixtureManager()->truncateTable('table_name');
$this->getFixtureManager()->checkIntegrity(false);
这再次假设您为单元测试文件扩展 CDbTestCase。如果不是,那么您可以像这样直接删除完整性检查:
Yii::app()->db->createCommand('set foreign_key_checks=0')->execute();
//do whatever, including truncating
Yii::app()->db->createCommand('set foreign_key_checks=1')->execute();
这也将暂时禁用外键检查。
【讨论】:
只是为 Yii2 添加参考(因为没有容易找到的示例):
$this->db->createCommand()->checkIntegrity(false)->execute();
$this->truncateTable('table_name');
$this->db->createCommand()->checkIntegrity(true)->execute();
【讨论】:
Yii 可以截断:
Yii::app()->db->createCommand('TRUNCATE tbl_name')->execute();
【讨论】:
如果您在 Yii 中使用 Fixture 支持进行测试,它将自动为您处理...
【讨论】: