Symfony4 学说单元测试:实体在缓存中有旧数据?
Symfony4 doctrine unit tests: entity has old data in cache?
我正在开发 Symfony4 应用程序并想测试服务是否真的更新了我的数据库。
这里我给出一个数据传输对象
public function update(ChargeDto $chargeDto): ChargeDto
{
$charge = $this->chargeRepository->find($chargeDto->id);
// The mapper fills the new data into my entity
$charge = ChargeMapper::fromDto($charge, $chargeDto);
// here I check that the entity has in fact the new data
VarDumper::dump($charge->getAuthorPNumber());
$this->entityManager->persist($charge);
$this->entityManager->flush();
$this->entityManager->refresh($charge);
// here I check that the entity still has the new data
VarDumper::dump($charge->getAuthorPNumber());
return ChargeMapper::toDto($charge, $chargeDto);
}
在我的测试中 class 我从数据库中获取更新的数据集以检查它是否真的更新了:
$res = $this->chargeRepo->find($updatedDto->id);
VarDumper::dump($res->getAuthorPNumber());
我得到了旧数据。如果我手动查看数据库,我会发现它实际上已更新并包含新值。
我不知道有任何缓存被主动激活。
我的测试如何获得真正的新值和更新值?
P.S.: 我只是仔细检查:对于生产环境,我有一个用于学说缓存的配置(/config/prod/doctrine.yaml),但既没有用于开发环境也没有用于测试环境。
您的 entityManager
应该有一个名为 clear 的函数,它将删除缓存的对象。 (确保只在测试中而不是在实际代码中调用它)
您也可以通过将 EntityName 作为参数传递给函数,从缓存中仅清除一种类型的实体。
我正在开发 Symfony4 应用程序并想测试服务是否真的更新了我的数据库。
这里我给出一个数据传输对象
public function update(ChargeDto $chargeDto): ChargeDto
{
$charge = $this->chargeRepository->find($chargeDto->id);
// The mapper fills the new data into my entity
$charge = ChargeMapper::fromDto($charge, $chargeDto);
// here I check that the entity has in fact the new data
VarDumper::dump($charge->getAuthorPNumber());
$this->entityManager->persist($charge);
$this->entityManager->flush();
$this->entityManager->refresh($charge);
// here I check that the entity still has the new data
VarDumper::dump($charge->getAuthorPNumber());
return ChargeMapper::toDto($charge, $chargeDto);
}
在我的测试中 class 我从数据库中获取更新的数据集以检查它是否真的更新了:
$res = $this->chargeRepo->find($updatedDto->id);
VarDumper::dump($res->getAuthorPNumber());
我得到了旧数据。如果我手动查看数据库,我会发现它实际上已更新并包含新值。
我不知道有任何缓存被主动激活。 我的测试如何获得真正的新值和更新值?
P.S.: 我只是仔细检查:对于生产环境,我有一个用于学说缓存的配置(/config/prod/doctrine.yaml),但既没有用于开发环境也没有用于测试环境。
您的 entityManager
应该有一个名为 clear 的函数,它将删除缓存的对象。 (确保只在测试中而不是在实际代码中调用它)
您也可以通过将 EntityName 作为参数传递给函数,从缓存中仅清除一种类型的实体。