2014-11-14 2 views
0

Я создал слушатель на событии доктрины (сохраняется, обновить & удалить), что сохранить в удаленной БД всех действий (рисунок: , которые делают то, что, когда, старое значение, новое значение).Symfony2 - Тестирование Доктрина Слушатель

Это работает.

Для непрерывной интеграции я написал несколько модульных тестов, извлекая эти журналы после каждого действия.

/** 
* @param $uid  user id 
* @param $isValid is user need to be added 
*/ 
public function testGetLogs($uid, $isValid) { 

    $um = static::$kernel->getContainer()->get('user_manager'); 

    /** @var EntityManager $em */ 
    $em = $this->doctrine->getManager(); 
    $referentielUser = $um->getReferentielUser($uid); 

    // Lazy method to retrieve application's identifiers 
    $auditDummy = new AuditEntry(); 
    $dir = $auditDummy->getAppDir(); 
    $host = $auditDummy->getAppHost(); 

    if (false !== $referentielUser) { 
     $user = $referentielUser->toUser(); 
     // add the user 
     $valid = $um->addUser($user); 
    } else { 
     $valid = false; 
    } 

    $this->assertEquals($isValid, $valid); 

    if ($valid) { 
     // find latest logs for insertion 
     $logs = array_reverse($this->doctrineListener->getLogs(array('appdir'=>$dir, 'apphost'=>$host))); 
     $this->logTesting($logs[0], 'insert'); 

     // edit the user 
     $user->setLocked(true); 
     $em->commit(); 

     // find latest logs for edition 
     $logs = array_reverse($this->doctrineListener->getLogs(array('appdir'=>$dir, 'apphost'=>$host))); 
     $this->logTesting($logs[0], 'update'); 

     // remove the user 
     $em->remove($user); 
     $em->commit(); 

     // find latest logs for removal 
     $logs = array_reverse($this->doctrineListener->getLogs(array('appdir'=>$dir, 'apphost'=>$host))); 
     $this->logTesting($logs[0], 'delete'); 

    } 

} 

private function logTesting($log, $type) { 
    $this->assertEquals(/* Folder */, $log['APPDIR']); 
    $this->assertEquals('cli', $log['IP']); 
    $this->assertEquals(/* Table */, $log['TARGETTABLE']); 
    $this->assertEquals(strtoupper($type), $log['ACTION']); 

    $dateLog = date_create_from_format('Y-m-d H:i:s', $log['DATETIME']); 
    $diff = $dateLog->diff(new \DateTime()); 
    $this->assertLessThan(5, $diff->s); 
} 

Пользователь правильно добавлен, но не редактируется и не удаляется. Не могли бы вы помочь мне?

ответ

0

Вы должны использовать $em->flush(), чтобы Doctrine выполнял запросы к базе данных, а не $em->commit.

+0

И могу ли я использовать два флеша подряд? $ user-> setEnabled (false); $ em-> flush(); $ em-> remove ($ user); $ em-> flush(); – Senorihl

+0

Конечно, вы можете вызывать метод 'flush' столько раз, сколько вам нужно - он будет записывать изменения базы данных, которые вы сделали до сих пор. – kozlice

+0

Я использовал 'flush', как вы сказали, но не прошел метод' $ this-> logTesting() ', поэтому мне пришлось переписать его в тело метода testGetLog. – Senorihl

Смежные вопросы