我想要测试的控制器代码包括像
这样的查询的函数$this->Model->find('all', [
'joins' => [
'table' => database.table,
'type' => 'inner',
'conditions' => ['table.id' => 'Model.table_id']
],
]);
被广泛使用。
问题是testAction
在test
数据源中正确找到了Model的表,但是没有修改显式连接,它将它连接到实际的database.table
,而不是{{ 1}}。
我的直觉告诉我,重写这些查询以使用CakePHP包含而不是连接应该允许CakePHP的test.table
用ControllerTestCase
数据源替换连接模型的数据源,从而解决问题。但是,我不想重写所有查询代码。
有没有人知道解决这个问题的方法?如果没有,我认为包含方法能解决问题是否正确?
答案 0 :(得分:2)
问题在于,在加入中,'table' => database.table,
是硬编码的,因此蛋糕无法将查询重定向到test
数据源(它会在table
中查找database
})。要解决此问题,请将database
中的database.test
替换为$this->Model->getDataSource()->config['database']
,其中Model
表示模型table
表示(或者是联接表)。在测试用例中,Cake可以将模型的数据源更改为test
数据源,因此查询将被正确修改。