我尝试为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,但我无法更改数据类型。是否有任何解决方法可以使用枚举运行单元测试?
答案 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');
}