psalm-plugin-phpunit
psalm-plugin-phpunit copied to clipboard
`MissingConstructor` issues detected when explicitly specifying a test code analysis path
While working on a project that uses very strict psalm settings and this plugin, we discovered that running vendor/bin/psalm
with following configuration and no arguments, no issues are reported:
<?xml version="1.0"?>
<psalm
totallyTyped="true"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
>
<projectFiles>
<directory name="src"/>
<directory name="tests/src"/>
<ignoreFiles>
<directory name="vendor"/>
</ignoreFiles>
</projectFiles>
<issueHandlers>
<InternalMethod>
<errorLevel type="suppress">
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturnCallback"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturn"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::method"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::with"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::withConsecutive"/>
</errorLevel>
</InternalMethod>
</issueHandlers>
<plugins>
<pluginClass class="Psalm\PhpUnitPlugin\Plugin"/>
</plugins>
</psalm>
If I run vendor/bin/psalm tests
(new argument added!), the output changes, and starts reporting stuff that is generally silenced by this plugin (the following, but for every test):
ERROR: MissingConstructor - tests/src/Unit/Presentation/UserViewTest.php:27:35 - SomeProject\Core\Tests\Unit\Presentation\UserViewTest has an uninitialized property $this->user, but no constructor (see https://psalm.dev/073)
private UserSettingRepository $userSettingRepository;
Interestingly, no other errors around assertions nor anything: it seems like the translation from setUp
to __construct
isn't really working as expected :thinking:
Tried it on updated dependencies BTW:
psalm/plugin-phpunit 0.12.2 Psalm plugin for PHPUnit
vimeo/psalm 3.17.2 A static analysis tool for finding errors in PHP applications
it seems like the translation from setUp to __construct isn't really working as expected thinking
It seems it's much easier than that - Psalm just doesn't trigger afterCodebasePopulated
in this use case.
@muglug, should it do that?
@weirdan is there a code reference? Perhaps somebody can send a patch, after having this knowledge...
Psalm also randomly reports some of the MissingConstructor
when running without arguments, which does not occur when running vendor/bin/psalm --no-diff
.
This doesn't seem related to this issue or even this repo. Please post a new issue in vimeo/psalm. If you can manage to reproduce on a small repo it would be even better