gpt4 book ai didi

unit-testing - 使用枚举的 CakePHP 测试的解决方法?

转载 作者:行者123 更新时间:2023-11-28 19:56:08 26 4
gpt4 key购买 nike

我尝试为 CakePHP 项目创建单元测试。创建固定装置和一些测试后,我遇到了问题:

Warning: Column type enum('on','off') does not exist in /app/cake/2.4.7/Cake/Model/Datasource/DboSource.php on line 3081

...

Application error: called handler method exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'state' in 'field list'' in /app/cake/2.4.7/Cake/Model/Datasource/DboSource.php:2923

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

最佳答案

我遇到了同样的问题。为了解决这个问题,我创建了一个子类来扩展 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');
}

关于unit-testing - 使用枚举的 CakePHP 测试的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com