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

`assertTrue` seems to lose inferred type

Open eliashaeussler opened this issue 8 months ago • 1 comments

  • phpstan/phpstan v2.1.13
  • phpstan/phpstan-phpunit v2.0.6

Given the following trait:

trait MockServerTrait
{
    private static ?MockWebServer\MockWebServer $mockServer = null;

    protected static function startMockServer(
        string $host = '127.0.0.1',
        int $port = 2083,
    ): MockWebServer\MockWebServer {
        self::$mockServer?->stop();
        self::$mockServer = new MockWebServer\MockWebServer($port, $host);
        self::$mockServer->start();

        \PHPStan\dumpType(self::$mockServer); // line 55
        self::assertTrue(self::$mockServer->isRunning());
        \PHPStan\dumpType(self::$mockServer); // line 57

        return self::$mockServer; // line 59
    }
}

When running PHPStan, I get the following errors:

------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  Line   tests/MockServerTrait.php (in context of class EliasHaeussler\CpanelRequests\Tests\MockServerAwareTestCase)                                                                                  
 ------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  55     Dumped type: donatj\MockWebServer\MockWebServer                                                                                                                                              
         ✏️  tests/MockServerTrait.php:55                                                                                                                                                             
  57     Dumped type: donatj\MockWebServer\MockWebServer|null                                                                                                                                         
         ✏️  tests/MockServerTrait.php:57                                                                                                                                                             
  59     Method EliasHaeussler\CpanelRequests\Tests\MockServerAwareTestCase::startMockServer() should return donatj\MockWebServer\MockWebServer but returns donatj\MockWebServer\MockWebServer|null.  
         🪪  return.type                                                                                                                                                                              
         ✏️  tests/MockServerTrait.php:59                                                                                                                                                             
 ------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

When I omit the last self::assertTrue, no errors are reported anymore.

eliashaeussler avatar Apr 29 '25 05:04 eliashaeussler

root cause is here: https://github.com/phpstan/phpstan/issues/13735

staabm avatar Oct 29 '25 06:10 staabm