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

ban*_*cer 3 testing enums unit-testing cakephp cakephp-2.4

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

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

...

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

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

Dev*_*ung 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

<?php

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

class MyTableFixture extends MyTestFixture {
    public $import = array('model' => 'MyTable');
}
Run Code Online (Sandbox Code Playgroud)