仅在测试期间测试symfony原则UnitOfWork错误

时间:2019-12-10 11:24:45

标签: symfony doctrine phpunit

在用phpunit测试symfony应用程序时遇到问题。 我创建了一个服务,并且运行良好,但是当我在测试原则中执行该服务时,抛出了异常

A new entity was found through the relationship 'PointOfSale#country' that was not configured to cascade persist operations for entity

在我的服务中,我这样做:

$pointOfSale->setCountry($this->getCountry($name));

private function getCountry(string $name): Country
    {
        $country = $this->entityManager->getRepository(Country::class)->findOneBy(['alpha3Code' => $name]);
        return $country;
    }

我不明白为什么该实体不由UnitOfWorks管理。确实,当我执行以下代码时,只有在测试期间才会有异常

$country = $this->entityManager->getRepository(Country::class)->findOneBy(['alpha3Code' => $name]);
$this->entityManager->refresh($country);
 [ERROR] Entity Namespace\Country@000000001bfea0ed00000000602457d6 is not managed. An entity is    
         managed if its fetched from the database or registered as new through EntityManager#persist      

我该如何解决?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

在对PhpUnit Testing产生的“通过关系发现一个新实体”错误进行相同的问题故障排除时,我意识到由于这个question,我实际上得到了不同的Entity Manager实例。我所做的是将self::bootKernel()从我的__construct函数移到新的“ startUp”函数,该函数在每个测试函数开始时运行,然后每次都开始获取正确的Entity Manager,而不是每次都不同每个测试一个。

我可能遗漏了一些东西,但是现在我的测试通过了,并产生了与实际程序相同的结果。