具有显式连接的CakePHP单元测试控制器

时间:2015-08-20 14:06:12

标签: unit-testing cakephp cakephp-2.5

我想要测试的控制器代码包括像

这样的查询的函数
$this->Model->find('all', [
    'joins' => [
        'table' => database.table,
        'type' => 'inner',
        'conditions' => ['table.id' => 'Model.table_id']
    ],
]);

被广泛使用。

问题是testActiontest数据源中正确找到了Model的表,但是没有修改显式连接,它将它连接到实际的database.table,而不是{{ 1}}。

我的直觉告诉我,重写这些查询以使用CakePHP包含而不是连接应该允许CakePHP的test.tableControllerTestCase数据源替换连接模型的数据源,从而解决问题。但是,我不想重写所有查询代码。

有没有人知道解决这个问题的方法?如果没有,我认为包含方法能解决问题是否正确?

1 个答案:

答案 0 :(得分:2)

问题在于,在加入中,'table' => database.table,是硬编码的,因此蛋糕无法将查询重定向到test数据源(它会在table中查找database })。要解决此问题,请将database中的database.test替换为$this->Model->getDataSource()->config['database'],其中Model表示模型table表示(或者是联接表)。在测试用例中,Cake可以将模型的数据源更改为test数据源,因此查询将被正确修改。