【问题标题】:Yii test. Truncate foreign keys易测试。截断外键
【发布时间】:2013-10-06 04:44:18
【问题描述】:

在每次测试开始时截断数据库的最佳解决方案是什么?我有带外键的 InnoDB 引擎,yii 不能截断表。

【问题讨论】:

    标签: php unit-testing yii phpunit


    【解决方案1】:

    如果您扩展 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();
    

    这也将暂时禁用外键检查。

    【讨论】:

      【解决方案2】:

      只是为 Yii2 添加参考(因为没有容易找到的示例):

      $this->db->createCommand()->checkIntegrity(false)->execute();
      $this->truncateTable('table_name');
      $this->db->createCommand()->checkIntegrity(true)->execute();
      

      【讨论】:

        【解决方案3】:

        Yii 可以截断:

        Yii::app()->db->createCommand('TRUNCATE tbl_name')->execute();
        

        【讨论】:

        • 手动,Yii 可以自动完成,但是如果某些表有外键,它不会被截断。
        • 所以你需要先解决外键!
        【解决方案4】:

        如果您在 Yii 中使用 Fixture 支持进行测试,它将自动为您处理...

        【讨论】:

          猜你喜欢
          • 2014-01-07
          • 1970-01-01
          • 2011-07-24
          • 2019-11-04
          • 1970-01-01
          • 2020-06-23
          • 2016-07-28
          相关资源
          最近更新 更多