phpstan-doctrine icon indicating copy to clipboard operation
phpstan-doctrine copied to clipboard

Call to EntityManager::clear in loop not detected

Open Khartir opened this issue 1 year ago • 1 comments

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.

Khartir avatar Jul 02 '24 09:07 Khartir

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);

    // ...
}

ondrejmirtes avatar Jul 02 '24 09:07 ondrejmirtes