Typescript 測試驅動開發 TDD (8)
強制運行和跳過測試 (Forcing and skipping tests)
在處理一個已經編寫了多個測試的應用程序時,我們通常只想運行特定的測試或者一組特定的測試。這種操作被稱為強制運行測試,因為我們要求整個測試套件只運行指定的測試。可以通過以下兩種方式來實現:
1 describe("a group of tests", () => { 2 test.only("first test", () => { 3 expect("string value").toEqual("string value") 4 }) 5 6 fit("second test", () => { 7 expect("abc").not.toEqual("def"); 8 }) 9 });
在這里,我們使用test.only函數而不是僅使用test函數來強制運行名為"first test"的測試。我們還使用fit函數而不是僅使用it函數來強制運行名為"second test"的測試。此次測試運行的輸出如下:

(強制測試下 Jest 的命令行輸出)
在這里,我們可以看到測試運行只包括了名為"first test"和"second test"的測試,這些是我們強制執行的測試。還要注意,現在有一些跳過的測試,并且Jest會報告跳過的測試數量以及實際運行的測試數量。
使用it函數(Jasmine默認)而不是test函數(Jest默認)進行測試意味著我們只需要在一個it測試前加上字母f來強制執行它,即fit與it。這樣做可以節省很多時間,而不必輸入test.only來強制執行一個非常規的測試。因此,在本系列剩余部分中,我們將采用Jasmine風格的it測試命名約定來創建測試。
測試組也可以通過在describe函數前加上字母"f"來強制執行,如下所示:
1 fdescribe("a group of tests", () => { 2 test("first test", () => { 3 expect("string value").toEqual("string value") 4 }) 5 it("second test", () => { 6 except("abc").not.toEqual("def"); 7 }) 8 });
在這里,我們使用了fdescribe函數來定義我們的測試組,名為“a group of tests”,而不是標準的describe函數。使用fdescribe將強制整個測試組包含在測試運行中。
強制測試的相反是跳過測試 (skip tests)。要跳過一個測試,我們可以在測試前加上字母x,這樣它就變成了xit,如下所示:
1 fdescribe("a group of tests", () => { 2 test("first test", () => { 3 expect("string value").toEqual("string value") 4 }) 5 xit("second test", () => { 6 expect("abc").not.toEqual("def"); 7 }) 8 });
在這里,我們使用fdescribe強制運行名為“a group of tests”的測試組,并使用xit而不是it跳過名為“second test”的測試。以下是此測試運行的屏幕截圖:

(命令行輸出顯示Jest跳過一個測試)
在這里,我們可以看到同時使用fdescribe強制運行一組測試,并使用xit跳過一個測試。名為“a group of tests”的測試組被強制執行,因此只有“first test”和“second test”會被運行。然而,我們通過使用xit而不是it來跳過了名為“second test”的測試。這意味著唯一未被跳過的位于該測試組中的測試是“first test”。
請注意,跳過測試絕對不是一個好主意。編寫單元測試的目的是確保我們的應用程序按預期運行,并且測試是描述該行為應該如何的一種方式。
如果已經編寫了一個測試,那么應該重視它,并且任何代碼更改都應確保測試仍然通過,或者更新測試以適應新的行為。僅僅因為測試失敗而跳過它們是反對測試驅動開發的本質,應該盡一切努力避免這種情況。

浙公網安備 33010602011771號