建立外掛
社群外掛對於向 Pest 社群提供額外功能至關重要,而 Pest 團隊優先考量的是讓框架的核心小又快。在本章節中,我們將探討如何建立自己的外掛並與社群分享。
開發自己的外掛最簡單的方法是,從 pest-plugin-template 開始。若要從範本儲存庫產生新的儲存庫,請按一下 GitHub 的「使用此範本」按鈕,並將新的儲存庫命名為「pest-plugin-
複製儲存庫後,請務必修改 composer.json
檔案中的「名稱」和「說明」欄位以符合您的外掛。
Pest 外掛能夠透過 $this
變數公開自訂測試方法,加入命名空間功能,定義自訂預期值以及提供自訂 CLI 選項。
加入方法
讓我們透過透過 $this
變數建立新的測試方法,開始建置外掛。若要達成此目的,請在外掛中定義 PHP 特質。
1namespace YourGitHubUsername\PestPluginName;2 3trait MyPluginTrait4{5 public function myPluginMethod()6 {7 //8 }9}
為了透過 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 上編寫外掛程式可以作為您的開源專案的一個很棒的起點!在下一章節中,我們將探索「高階測試」的概念:高階測試