Hooks

Pest hooks 類似於準備餐點時可能會執行的步驟 - 首先,收集並準備食材,然後你進行烹飪,最後,清理善後。同樣地,hooks 允許你執行特定的動作,在每次測試或檔案之前或之後,例如設定測試資料、初始化測試環境,或在測試完成後清理資源。

透過在 Pest 中使用 hooks,你可以簡化測試程序,自動化重複的任務。無論是為小專案撰寫單元測試,或為大型應用程式建置複雜的測試套件,hooks 都可以幫你節省時間並提升你的測試品質。

另外,如果你希望讓 hooks 只對特定的一組測試執行,你可以在 describe() 函式中包含 hooks。

1beforeEach(function () {
2 //
3});
4 
5describe('something', function () {
6 beforeEach(function () {
7 //
8 });
9 
10 //
11});
12 
13test('something', function () {
14 //
15});

以下是 Pest 中可用的 hooks 清單

beforeEach()

在目前檔案中的每次測試之前執行提供的封閉,確保在每個測試之前完成任何必要的設定或組態。

1beforeEach(function () {
2 // Prepare something before each test run...
3});

在使用 beforeEach() hook 時,可以在目前檔案中的所有測試間初始化共用屬性。例如,你可以使用 beforeEach() 在執行每個測試之前初始化 $repository 屬性,確保它可用於檔案中的後續測試。

1beforeEach(function () {
2 $this->userRepository = new UserRepository();
3});
4 
5it('may be created', function () {
6 $user = $this->userRepository->create();
7 
8 expect($user)->toBeInstanceOf(User::class);
9});

afterEach()

在目前檔案中的每次測試之後執行提供的封閉,允許你清理在測試過程中可能已修改的任何資源或狀態。

1afterEach(function () {
2 // Clear testing data after each test run...
3});

因此,使用上述範例,如果 beforeEach() hook 用於初始化 $userRepository 屬性,則 afterEach() hook 可以用於在每個測試之後「清理」,視需要而定。這可確保物件可能使用的任何資源會在測試之間被釋放或重設,避免任何干擾或不必要的行為。

1afterEach(function () {
2 $this->userRepository->reset();
3});

可選擇使用 after() 方法在特定測試之後執行清理工作。這在需要清理專屬於單一測試而非在檔案中的所有測試間共用的資源時很有用。

1it('may be created', function () {
2 $this->userRepository->create();
3 
4 expect($user)->toBeInstanceOf(User::class);
5})->after(function () {
6 $this->userRepository->reset();
7});

beforeAll()

在目前檔案中執行任何測試之前執行提供的封閉,允許你執行任何必要的設定或初始化來適用於所有測試。

1beforeAll(function () {
2 // Prepare something once before any of this file's tests run...
3});

重要的是, 請注意,與 beforeEach() 掛鉤不同, beforeAll() 掛鉤中不提供 $this 變數。這是因為該掛鉤在執行任何測試之前就會執行, 所以沒有測試類或物件的執行個體可以讓變數指派。

afterAll()

在目前檔案中的所有測試都完成後,才會執行所提供的閉包一次, 這會允許您執行任何必要的清理或終止工作。

1afterAll(function () {
2 // Clean testing data after all tests run...
3});

就像 beforeAll() 方法, afterAll() 掛鉤中也不提供 $this 變數。這是因為 afterAll() 掛鉤通常會在檔案中的所有測試都完成後執行, 所以不再有測試執行個體或物件讓變數指派。


一旦您學會使用掛鉤設定前置條件以及為測試進行清理動作, 我們就可以討論「資料組」,這會讓您使用不同的輸入或參數執行相同的測試。資料組可以用在各種條件和臨界情況下徹底測試您的程式碼, 讓您可以找出並修復一些可能不會立即顯現的錯誤: 資料組 →