Call to EntityManager::clear in loop not detected
Khartir opened this issue · 1 comments
Khartir commented
I'm currently in the process of upgrading phpstan an phpstan-doctrine to the current version (phpstan 1.11.6, phpstan-doctrine 1.4.4) and I'm encountering a new error.
We have a test like the following:
public function testCleanup(EntityManager $entityManager): void
{
if ([] !== $entityManager->getRepository(Favourite::class)->findAll()) {
self::markTestSkipped('Invalid setup');
}
foreach ([1,2,3] as $dummy) {
// setup ...
$entityManager->clear();
}
self::assertCount(4, $entityManager->getRepository(Favourite::class)->findAll());
// ...
}
This test reports Call to static method PHPUnit\Framework\Assert::assertCount() with 4 and array{} will always evaluate to false.
.
When adding a $entityManager->clear();
outside the loop, no error is reported.
ondrejmirtes commented
As a workaround do this:
public function testCleanup(EntityManager $entityManager): void
{
$initial = $entityManager->getRepository(Favourite::class)->findAll();
if ([] !== $initial) {
self::markTestSkipped('Invalid setup');
}
foreach ([1,2,3] as $dummy) {
// setup ...
$entityManager->clear();
}
$favourites = $entityManager->getRepository(Favourite::class)->findAll();
self::assertCount(4, $favourites);
// ...
}