Symfony2 - Тестирование Доктрина Слушатель

0

Я создал слушателя в событии доктрины (persist, update & remove), который сохраняет в удаленной БД все действия (шаблон: кто что делает, когда, старое значение, новое значение).

Оно работает.

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

/**
 * @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 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);
}

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

Теги:
doctrine
phpunit
doctrine2

1 ответ

0
Лучший ответ

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

  • 0
    И можно ли использовать две промывки подряд? $ User-> setEnabled (ложь); $ Em-> заподлицо (); $ Em-> удалить ($ пользователю); $ Em-> заподлицо ();
  • 0
    Конечно, вы можете вызывать метод flush столько раз, сколько вам нужно - он будет записывать изменения базы данных, которые вы сделали на данный момент.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню