创建插件

社区插件对于为 Pest 社区提供额外功能至关重要,而 Pest 团队优先考虑保持框架核心的小巧和快速。在本章中,我们将讨论如何创建自己的插件并与社区共享。

开发自己的插件最简单的方法是从 pest-plugin-template 开始。要从模板库生成一个新的库,请点击 GitHub 上的“使用此模板”按钮,并将您的新库命名为“pest-plugin-".

克隆库后,请确保修改 composer.json 文件中的“name”和“description”字段以适合您的插件。

Pest 插件能够通过 $this 变量公开自定义测试方法,添加命名空间函数,定义自定义断言以及提供自定义 CLI 选项。

添加方法

让我们通过使新的测试方法可通过 $this 变量访问来开始构建我们的插件。为此,请在您的插件中定义一个 PHP trait。

1namespace YourGitHubUsername\PestPluginName;
2 
3trait MyPluginTrait
4{
5 public function myPluginMethod()
6 {
7 //
8 }
9}

为了使此 trait 方法可以通过 Pest 调用,我们必须通知 Pest 它应该使其可用。这可以通过在您的插件中创建一个包含以下内容的 Autoload.php 文件来实现。

1use YourGitHubUsername\PestPluginName\MyPluginTrait;
2 
3Pest\Plugin::uses(MyPluginTrait::class);

最后,我们需要更新插件的 composer.json 文件以加载我们的 Autoload.php 文件以及我们的插件源代码。

1"autoload": {
2 "psr-4": {
3 "YourGitHubUsername\\PestPluginName\\": "src/"
4 },
5 "files": ["src/Autoload.php"]
6},

将您的插件发布到 Packagist 后,用户将能够通过 Composer 安装您的插件。安装后,他们将能够在其测试闭包中访问插件的功能。

1test('plugin example', function () {
2 $this->myPluginMethod();
3 
4 //
5})

添加函数

插件还可以定义其他命名空间函数,这些函数通常在插件的 Autoload.php 文件中声明。

1namespace YourGitHubUsername\PestPluginName;
2 
3function myPluginFunction(): void
4{
5 //
6}

在插件函数中,您可以访问通常可用于测试闭包的当前 $this 变量,方法是调用不带参数的 test() 函数。

1namespace YourGitHubUsername\PestPluginName;
2 
3use PHPUnit\Framework\TestCase;
4 
5function myPluginFunction(): TestCase
6{
7 return test(); // Same as `return $this;`
8}

修改插件的 composer.json 文件以自动加载 Autoload.php 文件后,用户可以在其测试中轻松访问您的函数。

1use function YourGitHubUsername\PestPluginName\{myPluginFunction};
2 
3test('plugin example', function () {
4 myPluginFunction();
5 
6 // ...
7}

添加自定义断言

自定义断言可以合并到插件的 Autoload.php 文件中。有关如何构建自定义断言的信息,请参阅有关 自定义断言 的全面文档。

添加 Arch 预设

如果您的插件提供自定义 Arch 预设,您可以在 Autoload.php 文件中定义它。

1pest()->preset('ddd', function () {
2 return [
3 expect('Infrastructure')->toOnlyBeUsedIn('Application'),
4 expect('Domain')->toOnlyBeUsedIn('Application'),
5 ];
6});

可选地,您可以在闭包回调的第一个参数中访问应用程序 PSR-4 命名空间。

1pest()->preset('silex', function (array $userNamespaces) {
2 dump($userNamespaces); // ['App\\']
3});

如您所见,在 Pest 上创建插件可以作为您开源工作的绝佳起点!在下一章中,我们将探讨“高阶测试”的概念:高阶测试