创建插件
社区插件对于为 Pest 社区提供额外功能至关重要,而 Pest 团队优先考虑保持框架核心的小巧和快速。在本章中,我们将讨论如何创建自己的插件并与社区共享。
开发自己的插件最简单的方法是从 pest-plugin-template 开始。要从模板库生成一个新的库,请点击 GitHub 上的“使用此模板”按钮,并将您的新库命名为“pest-plugin-
克隆库后,请确保修改 composer.json
文件中的“name”和“description”字段以适合您的插件。
Pest 插件能够通过 $this
变量公开自定义测试方法,添加命名空间函数,定义自定义断言以及提供自定义 CLI 选项。
添加方法
让我们通过使新的测试方法可通过 $this
变量访问来开始构建我们的插件。为此,请在您的插件中定义一个 PHP trait。
1namespace YourGitHubUsername\PestPluginName;2 3trait MyPluginTrait4{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(): void4{5 //6}
在插件函数中,您可以访问通常可用于测试闭包的当前 $this
变量,方法是调用不带参数的 test()
函数。
1namespace YourGitHubUsername\PestPluginName;2 3use PHPUnit\Framework\TestCase;4 5function myPluginFunction(): TestCase6{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 上创建插件可以作为您开源工作的绝佳起点!在下一章中,我们将探讨“高阶测试”的概念:高阶测试