在用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
我该如何解决?
答案 0 :(得分:0)
答案 1 :(得分:0)
在对PhpUnit Testing产生的“通过关系发现一个新实体”错误进行相同的问题故障排除时,我意识到由于这个question,我实际上得到了不同的Entity Manager实例。我所做的是将self::bootKernel()
从我的__construct
函数移到新的“ startUp”函数,该函数在每个测试函数开始时运行,然后每次都开始获取正确的Entity Manager,而不是每次都不同每个测试一个。
我可能遗漏了一些东西,但是现在我的测试通过了,并产生了与实际程序相同的结果。