phpstan/phpstan-doctrine

Call to EntityManager::clear in loop not detected

Khartir opened this issue · 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.

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

    // ...
}