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

CakePHP unit-testing controllers with explicit joins

我要测试的控制器代码包括查询如

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

被广泛使用。

问题是 testActiontest 数据源中正确找到模型的 table,但没有修改显式连接,将其连接到实际 database.table,而不是 test.table.

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

有谁知道解决这个问题的方法吗?如果不是,我认为 contain 方法可以解决问题是否正确?

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