Symfony4 doctrine модульные тесты: у объекта есть старые данные в кеше? - PullRequest
1 голос
/ 14 июля 2020

Я разрабатываю приложение 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());

, и я получаю старые данные. Если я загляну в базу данных вручную, я вижу, что она действительно была обновлена ​​и содержит новые значения.

Я не знаю, активно ли какое-либо кеширование. Как мой тест может получить реальную частоту sh новые и обновленные значения ?

PS: Я только что дважды проверил: для среды prod у меня есть конфигурация для doctrine кэширования (/ config /prod/doctrine.yaml), но не для среды разработки или тестирования.

1 Ответ

0 голосов
/ 15 июля 2020

Ваш entityManager должен иметь функцию с именем clear, которая удалит кешированные объекты. (Убедитесь, что вы вызываете это только в тесте, а не в фактическом коде)

Вы также можете очистить только 1 тип объекта из кеша, передав функции EntityName в качестве параметра.

...