내 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;
}
를, 그래서 '기록을 작성하고 너무 같은 사실 수익을 돌려 테스트하기 위해 노력하고있어 : (! 이미 행을 삽입 한 이후 잘못된 결과 인)
$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'); 방금 삽입 한 행을 반환합니다. 그러나 나는 그 수준에 대해 전혀 모른다. –