cakePHP运行单元测试问题

时间:2013-07-12 16:23:39

标签: mysql cakephp phpunit

我尝试在cakePHP 2.0应用程序中测试时遇到了最奇怪的问题。我在模型中有一个函数,用于查询数据库以检查应用程序是否已在过去25天内发送通知:

public function checkIfNotified($userId){
    $query = 'SELECT count(`user_id`) AS notify '.
        'FROM `churn_stats` '.
        'WHERE `user_id` = '. $userId.' '.
        'AND `notified` = 1 '.
        'AND TIME_TO_SEC(TIMEDIFF(NOW(),`created`)) <= 2160000 ';
        $this->log($query);
    $result = $this->query($query);
    return $result;
}

我正在做一些单元测试以检查方法是否有效,所以我正在创建一个记录并尝试测试它返回true如下所示:

$data['notified'] = 1;
$data['user_id'] = $userId;
$this->ChurnStats->create();
$this->ChurnStats->save($data);
$notified = $this->ChurnStats->checkIfNotified($userId);
print_r($notified);

结果之后(因为我已经插入了一行,这是错误的结果!):

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [notify] => 0
                )

        )

)

但是我运行DB中代码生成的确切查询,结果是: enter image description here

我已经失去了很多时间,我不知道出了什么问题:(。

1 个答案:

答案 0 :(得分:0)

在测试并检查所有内容后,它是另一个测试函数,不知何故正在改变数据库或下一个测试的查询,但奇怪的部分是另一个测试调用相同的查询,但没有任何插入,更新或删除可能会修改下一个测试的结果或环境。

检查完所有内容后,所有内容都缩减为:查询缓存,默认情况下,CakePHP缓存所有$ this-&gt;查询(“...”);调用所以修复非常简单:停用它!

$result = $this->query($query, false);