Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2-测试原则侦听器_Php_Symfony_Doctrine Orm_Doctrine_Phpunit - Fatal编程技术网

Php Symfony2-测试原则侦听器

Php Symfony2-测试原则侦听器,php,symfony,doctrine-orm,doctrine,phpunit,Php,Symfony,Doctrine Orm,Doctrine,Phpunit,我已经在doctrine事件(persist、update和remove)上创建了一个侦听器,它将所有操作保存在远程DB中(模式:谁做什么,何时做什么,旧值,新值) 它起作用了 为了实现持续集成,我通过在每次操作后检索这些日志编写了一些单元测试 /** * @param $uid user id * @param $isValid is user need to be added */ public function testGetLogs($uid, $isValid) {

我已经在doctrine事件(persist、update和remove)上创建了一个侦听器,它将所有操作保存在远程DB中(模式:谁做什么,何时做什么,旧值,新值

它起作用了

为了实现持续集成,我通过在每次操作后检索这些日志编写了一些单元测试

/**
 * @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);
}
用户已正确添加,但未编辑或删除。
您能帮助我吗?

您应该使用
$em->flush()
来执行对数据库的查询,而不是
$em->commit

,我可以连续使用两次flush吗$用户->设置启用(假)$em->flush()$em->remove($user)$em->flush();当然,您可以根据需要多次调用
flush
方法-它将写入您目前所做的数据库更改。正如您所说,我使用了
flush
,但它没有通过
$this->logTesting()
方法,因此我必须在
testGetLog
方法的主体中重写它。