0
我試圖在CakePHP 2.0應用程序中測試某些內容時遇到了最奇怪的問題。我有一個查詢數據庫來檢查應用程序已經派出在過去的25天通知的模型裏面的函數:CakePHP運行單元測試問題
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;
}
我正在做一些單元測試,以檢查方法的工作,所以我「M創造了記錄,並試圖對其進行測試返回還真像這樣:(!這是一個錯誤的結果,因爲我已經插入了行)
$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
)
)
)
Howev呃我運行在DB中的代碼生成的確切查詢和結果是:
我已經失去了很多時間,我不知道什麼是錯的:(。
交易隔離?當「*運行由DB *中的代碼生成的確切查詢」時,是否與插入進行時處於相同的數據庫會話中?如果是這樣,插入是否被提交?如果是這樣,事務中的PHP會話是否在插入之前,在'REPEATABLE READ'級別隔離? – eggyal
是的,是我的代碼執行後中斷測試執行的同一個數據庫會話,以防止UnitTest擦除臨時數據。表。不是一個事務,所以不需要提交(其他測試就像這樣運行並且工作正常),我也做了一個$ this-> ChurnStats-> find('all');並返回我剛插入的行。但是我不知道這個級別。 –