【发布时间】:2012-04-24 03:01:00
【问题描述】:
我正在使用 cake bake 命令来创建我的夹具和测试模型。我已经用我的一个模型成功地完成了它,但我在另一个模型上遇到了问题。
我不知道为什么,它尝试使用默认数据库,而不是使用我已经定义的测试数据库,这是我测试的第一个模型使用的数据库。
两个测试模型,一个运行良好,第二个不运行,都是用蛋糕烘焙创建的,它们看起来完全一样。
他们俩的夹具类中都有这个:
public $import = array('records' => true, 'connection' => 'test');
Test 定义了与我的测试数据库的连接。 可能是什么问题?
我做了一些奇怪的实验。在我的测试模型中,如果我使用单数而不是复数,它适用于默认数据库 BUT 如果我将其更改为复数,它适用于测试数据库。 (但它不能调用模型中的任何方法,只是定义了find()等方法)。
例如:
public function setUp() {
parent::setUp();
//uses the default DB (i dont know why)
$this->Post = ClassRegistry::init('Post');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //works well
//uses the default Test Database (i dont know why either)
$this->Post = ClassRegistry::init('Posts');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //doesn't work. No function found.
/*SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updatePostsStatus' at line 1*/
}
谢谢。
我已经更新了。
最后更新和解决方案
问题在于 Post Model 构造函数的初始化错误。 使用复数是不相关的。就像使用任何不存在的模型一样。它将始终获取测试数据库。 构造函数良好初始化的答案在这里: How to override model's constructor correctly in CakePHP
【问题讨论】:
-
我认为注册表中有一个名为
Post的类附加到default数据库,它可能之前已经实例化。当您尝试调用Posts时,Cake 在注册表中找不到任何具有该名称的类,因此它会创建一个新类,并且由于您在测试套件中,它假定数据库为新类Posts是test -
那你建议我怎么做?
-
对不起,我也有点迷路了。不过有一件事......你有没有尝试导入像
public $import = array('Post')这样的记录?它应该自动附加testdb。 -
我不想导入它们。我想添加我在我的灯具上创建的那些。
标签: database cakephp testing cakephp-2.0