使用枚举进行CakePHP测试的解决方法?

时间:2014-04-25 21:06:56

标签: unit-testing cakephp testing enums cakephp-2.4

我尝试为CakePHP项目创建单元测试。在创建灯具和一些测试后,我遇到了问题:

  

警告:列类型枚举(' on',' off')不存在于   /app/cake/2.4.7/Cake/Model/Datasource/DboSource.php   在第3081行

     

...

     

应用程序错误:调用处理程序方法异常' PDOException'同   消息' SQLSTATE [42S22]:找不到列:1054未知列   '状态'在'字段列表''在   /app/cake/2.4.7/Cake/Model/Datasource/DboSource.php:2923

我知道CakePHP不支持enum,但我无法更改数据类型。是否有任何解决方法可以使用枚举运行单元测试?

1 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。为了解决这个问题,我创建了一个扩展CakeTestFixture类的子类,并重写了表的创建,以便将所有枚举字段重新映射到字符串。

<?php

class MyTestFixture extends CakeTestFixture {

  /**
   * Maps enum fields in the database to strings with a length of 64
   */
  function create(&$db) {
    foreach($this->fields as $name => &$field) {
      if( strstr($field['type'], "enum") !== false ) {
        $field['type'] = 'string';
        $field['length'] = 64;
      }
    }
    parent::create($db);
  }
}

要使用它,只需在夹具中扩展此类,而不是CakeTestFixture。

<?php

App::uses('MyTestFixture', 'WhereverYouPutIt');

class MyTableFixture extends MyTestFixture {
    public $import = array('model' => 'MyTable');
}