プラグインの作製
コミュニティプラグインは、追加の機能を Pest コミュニティに提供するために不可欠です。一方、Pest チームはフレームワークのコア部分を小さく高速に保つことを優先します。この章では、独自のプラグインを作成してコミュニティと共有する方法について説明します。
独自のプラグインを開発する最も簡単な方法は、pest-plugin-templateから始めることです。テンプレートリポジトリから新しいリポジトリを生成するには、GitHub の「このテンプレートを使用」ボタンをクリックして、新しいリポジトリに「pest-plugin-」という名前を付けます。
リポジトリを複製したら、composer.json
ファイルの「name」と「description」フィールドを、プラグインに合うように変更してください。
Pest プラグインは、$this
変数経由でカスタムテストメソッドを公開し、名前空間付き関数を追加し、カスタム期待値を定義し、カスタム CLI オプションを提供することができます。
メソッドの追加
$this
変数経由で新しいテストメソッドを利用できるようにすることで、プラグインの構築を開始しましょう。これを実現するには、プラグインに PHP トレイトを定義します。
1namespace YourGitHubUsername\PestPluginName;2 3trait MyPluginTrait4{5 public function myPluginMethod()6 {7 //8 }9}
Pest 経由でこのトレイトメソッドを呼び出すことができるようにするには、次の内容の Autoload.php
ファイルをプラグイン内に作成して、Pest に利用できるように知らせる必要があります。
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 でプラグインを作成すると、オープンソースの取り組みに着手するための素晴らしい足掛かりになります! 次の章では、「高階テスト」の概念について詳しく説明します: 高階テスト