ghostwriter/psalm-plugin-tester

提供用于测试Psalm插件的框架

0.2.1 2023-08-04 20:49 UTC

README

Compliance Supported PHP Version Mutation Coverage Code Coverage Type Coverage Latest Version on Packagist Downloads

工作进行中

警告

该项目尚未完成,仍在开发中。

安装

您可以通过composer安装此包

composer require ghostwriter/psalm-sandbox --dev

用法

您可以通过扩展 AbstractPsalmSandboxTestCase 类来为您的插件创建一个测试。

例如 tests/Unit/MyPsalmPluginTest.php

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Unit;

use Ghostwriter\PsalmSandbox\AbstractPsalmSandboxTestCase;
use Psalm\Issue\CodeIssue;
use Psalm\Issue\MissingReturnType;
use Psalm\Plugin\PluginEntryPointInterface;
use Vendor\Package\MyPsalmPlugin;

final class MyPsalmPluginTest extends AbstractPsalmSandboxTestCase
{
    /**
     * @var class-string<PluginEntryPointInterface>
     */
    public const PLUGIN = MyPsalmPlugin::class;

    /**
     * @var array<class-string<CodeIssue>>
     */
    public const ISSUES = [MissingReturnType::class];
}

然后您可以使用PHPUnit运行您的测试。

vendor/bin/phpunit

插件开发

示例目录结构

您的插件应该具有以下目录结构

composer.json
MyPsalmPlugin.php
src/
│   {PsalmIssueType}/
│   │   {FixIssue}.php
│   │   {ReportIssue}.php
│   │   {SuppressIssue}.php
│   MissingReturnType/
│   │   FixMissingReturnType.php
│   │   ReportMissingReturnType.php
│   │   SuppressMissingReturnType.php
tests/
│   Fixture/
│   │   {PsalmIssueType}/
│   │   │   fix-{PsalmIssueType}.php.inc
│   │   │   report-{PsalmIssueType}.php.inc
│   │   │   suppress-{PsalmIssueType}.php.inc
│   │   MissingReturnType/
│   │   │   fix-0001.php.inc
│   │   │   fix-missing-returntype.php.inc
│   │   │   report-0001.php.inc
│   │   │   report-missing-returntype.php.inc
│   │   │   suppress-0001.php.inc
│   │   │   suppress-missing-returntype.php.inc
│   Unit/
│   │   MyPsalmPluginTest.php

示例 Fix 测试

当您运行 vendor/bin/psalm --alter 时,它将自动为您修复代码。

要创建一个 Fix 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以前缀 fix- 和任何唯一标识符开头,例如 fix-0001.php.inc

文件必须使用 <!-- SEPARATOR --> 来分隔 beforeafter 代码。

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class FixMissingReturnType
{
    public function fixMissingReturnType()
    {
    }
}
?>
<!--  SEPARATOR -->
<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class FixMissingReturnType
{
    public function fixMissingReturnType(): void
    {
    }
}
?>

示例 Report 测试

当您运行 vendor/bin/psalm 时,它将报告您的代码中的问题。

要创建一个 Report 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以前缀 report- 和任何唯一标识符开头,例如 report-0001.php.inc

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class ReportMissingReturnType
{
    public function reportMissingReturnType()
    {
    }
}

示例 Suppress 测试

您可以通过添加 @psalm-suppress 注释、向您的 psalm.xml 文件添加抑制或使用插件来抑制您的代码中的问题。

要创建一个 Suppress 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以前缀 suppress- 和任何唯一标识符开头,例如 suppress-0001.php.inc

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class SuppressMissingReturnType
{
    /**
     * @psalm-suppress MissingReturnType
     */
    public function suppressMissingReturnType()
    {
    }
}

测试

composer test

变更日志

请参阅 CHANGELOG.md 了解最近更改的详细信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件 nathanael.esayeas@protonmail.com 而不是使用问题跟踪器。

支持

[成为GitHub赞助商]

谢谢

感谢那些为社区创建和维护有价值项目的人的努力。

感谢 Bruce Weirdan 提供原始的 psalm/codeception-psalm-module,这成为了我工作的起点。

感谢 Matt Brownvimeo/psalm 的创造者,这是一个出色的PHP静态分析工具。

特别感谢 @orklah 维护 vimeo/psalm,确保其持续改进和功能。

致谢

许可协议

BSD-3-Clause许可。请参阅许可文件获取更多信息。