Doctrtrive方法是否异步工作?

时间:2015-11-27 18:25:57

标签: php symfony doctrine-orm phpunit

我有一个功能测试创建了几个记录,然后进行了一些请求调用,测试有时会通过而其他没有,这真的很奇怪,当我使用var_dump它有时会给我我需要的记录数量,其他时候它只是给我少于那个。

这是代码:

    foreach (range(0, 80) as $number)
    {
        $citaDetalle = new CitasDetalle();
        $citaDetalle->setCodigo('FF#')
            ->setCitaGenerator($generator)
            ->setUidCreate($user)
            ->setFechaCita( DateExtension::nextLaborDay((new \DateTime())->modify("+5 Day"), false, false) )
            ->setCitaTurno($turno)
            ->setCitaPlace($place)
        ;
        $em->persist($citaDetalle);
    }
    foreach (range(0, 20) as $number)
    {
        $citaDetalle = new CitasDetalle();
        $citaDetalle->setCodigo('FF#')
            ->setCitaGenerator($generator)
            ->setUidCreate($user)
            ->setFechaCita( DateExtension::nextLaborDay((new \DateTime())->modify("+5 Day"), false, false) )
            ->setCitaTurno($turno2)
            ->setCitaPlace($place)
        ;
        $em->persist($citaDetalle);
    }
    $em->flush();

    $crawler = $this->client->request('GET', '/c/g/citas/new');
    $this->assertEquals(200, $this->client->getResponse()->getStatusCode(),
        "Unexpected HTTP status code for GET /c/g/citas/new");

    $form = $crawler->selectButton('Generar Cita')->form([
        'core_gestion_bundle_citas_detalle_type[citaGenerator]' =>
            $crawler->filter('#core_gestion_bundle_citas_detalle_type_citaGenerator option:contains("Generator Test")')->attr('value')
    ]);
    $this->client->submit($form);

    $this->client->followRedirect();

    $lastDate = $em->getRepository('CoreGestionBundle:CitasDetalle')
        ->obtenerUltimaCita()[0]->getFechaCita();

    $compareDate = DateExtension::nextLaborDay((new \DateTime())->modify("+6 Day"));

    $this->assertEquals($compareDate->format('Y-m-d'), $lastDate->format('Y-m-d'));

1 个答案:

答案 0 :(得分:1)

这不是测试事物的正确方法。为什么要在数据库中创建一遍又一遍的记录?与DataFixtures一样愚蠢,你可以达到同样的目标,但你只能做一次(更重要的是,你不需要"乱扔你的测试代码")

还要记住,应该在每次测试时清除并恢复您的数据库(或者,如果您能够执行此操作,请测试"使用事务和/或在tearDown()函数中写入#34; ,丢弃变更)

回答你的问题

不,学说不会在异步中做事。方式,你的问题必须在其他地方。