Symfony4 学说单元测试:实体在缓存中有旧数据?

问题描述 投票:0回答:1

我正在开发一个 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);
}

在我的测试类中,我从数据库中获取更新的数据集以检查它是否真的更新了:

    $res = $this->chargeRepo->find($updatedDto->id);
    VarDumper::dump($res->getAuthorPNumber());

我得到了旧数据。如果我手动查看数据库,我会发现它实际上已更新并包含新值。

我不知道是否主动激活了任何缓存。 我的测试怎样才能得到真正新鲜的和更新的值

P.S.:我刚刚仔细检查过:对于 prod 环境,我有一个教义缓存配置( /config/prod/doctrine.yaml ),但既不用于开发环境,也不用于测试环境。

doctrine phpunit symfony4
1个回答
1
投票

您的

entityManager
应该有一个名为clear的函数,它将删除缓存的对象。 (确保仅在测试中调用它,而不是在实际代码中调用)

您还可以通过将 EntityName 作为参数传递给函数,从缓存中仅清除 1 种类型的实体。

© www.soinside.com 2019 - 2024. All rights reserved.