你需要了解的前端測試“金字塔”

發表於2017-11-24

如果您正在測試前端應用程式,則應該瞭解前端測試金字塔。

在本文中,我們將看到前端測試金字塔是什麼,以及如何使用它來建立全面的測試套件。

前端測試金字塔

前端測試金字塔是一個前端測試套件應該如何構建的結構化表示。

理想的測試套件由單元測試,一些快照測試和一些端到端(e2e)測試組成。

這是測試金字塔的改進版本,特定於測試前端應用程式。

在這篇文章中,我們將看到每個測試型別的樣子。 為此,我們將為示例應用程式建立一個測試套件。

應用

要詳細瞭解前端測試金字塔,我們來看看如何測試一個 Web 應用。

該應用是一個簡單的 modal 應用。 點選一個按鈕開啟一個 modal ,點選 modal 上的 OK 按鈕關閉 modal。

我們將從基於元件的框架構建應用。 別擔心細節,我們會保持這個(詳細)的級別。

該應用由三個元件組成 – 一個 Button 元件,一個 Modal 元件和一個 App 元件。

我們要寫的第一個測試是單元測試。 在前端測試金字塔中,大部分測試都是單元測試。

單元測試

單元測試測試的是程式碼庫的單元。

它們直接呼叫函式或單元,並確保返回正確的結果。

在我們的應用中,我們的元件是單元。所以我們將為 Button 和 Modal 編寫單元測試。沒有必要為我們的應用元件編寫測試,因為它沒有任何邏輯。

單元測試會淺渲染元件,並斷言當我們與它們互動時,它們的行為是正確的。

淺渲染意味著我們渲染元件一層深度。這樣我們可以確保只測試元件,單元,而不是幾個級別的子元件。

在我們的測試中,我們將觸發元件上的操作,並檢查元件的行為是否與預期一致。

我們不用盯著程式碼。但是我們的元件規格會如下所示:

  • 當 displayModal 為 true 時,Modal 有類是活躍的
  • 當 displayModal 為 false 時,Modal 沒有類是活躍的
  • 當成功按鈕被點選時,Modal 呼叫 toggleModal
  • 單擊刪除按鈕時,Modal 會呼叫 toggleModal
  • 當 button 被點選時,button 呼叫 toggleModal

我們的測試將淺渲染元件,然後檢查每一項規格的工作。

單元測試應該佔據我們的測試套件的絕大部分有以下幾個原因:

單元測試很快

幾百個單元測試套件能在幾秒鐘內執行。

這使得單元測試對開發很有用。 當重構程式碼時,我們可以更改程式碼,並在沒有中斷元件的情況下執行單元測試來檢查更改。 我們會在幾秒鐘之內知道我們是否破壞了程式碼,因為其中一個測試會失敗。

單元測試是細顆粒的。

換句話說,他們是非常具體的。

如果一個單元測試失敗了,那麼這個測試會告訴我們它是如何以及為什麼失敗的。

單元測試能很好地檢查我們的應用程式工作的細節。 它們是開發時最好的工具,特別是如果你遵循測試驅動的開發。

但是它們無法測試一切。

為了確保我們呈現正確的樣式,我們還需要使用快照測試。

快照測試

快照測試是測試你的渲染元件的圖片,並將其與元件的以前的圖片進行比較。

用 JavaScript 編寫快照測試的最好方法是使用 Jest 。

Jest 不是拍攝渲染元件的圖片,而是渲染元件標記的快照。 這使得 Jest 快照測試比傳統快照測試快得多。

要在 Jest 中註冊快照測試,需要新增如下程式碼:

一旦你註冊一個快照,Jest 將顧及其它的一切。 每次執行單元測試時,都會重新生成一個快照,並將其與之前的快照進行比較。

如果程式碼改變,Jest 會丟擲一個錯誤,並警告標記已經改變。 然後開發者可以手動檢查沒有類被誤刪的情況。

在下面的測試中,有人從<footer>中刪除了 modal-card-foot 類。

快照測試是一種檢查元件樣式或標記的方法。

如果快照測試通過,我們知道程式碼更改不會影響元件的顯示。

如果測試失敗,那麼我們知道確實影響了元件的渲染,並可以手動檢查樣式是否正確。

每個元件至少應有一次快照測試。 一個典型的快照測試呈現元件的狀態,以檢查它正確呈現。

現在我們已經有了單元測試和快照測試,是時候看看端到端(e2e)測試。

端到端測試

端到端(e2e)測試是高層測試。

它們執行與我們手動測試應用程式時相同的操作。

在我們的應用程式中,我們有一個使用者(操作)旅程。當使用者點選按鈕時,模式將開啟,當他們點選模式中的按鈕時,模式將關閉。

我們可以編寫一個貫穿這一旅程的端到端測試。測試將開啟瀏覽器,導航到網頁,並通過每個操作來確保應用程式正常執行。

這些測試將告訴我們,我們的單元正確地協同工作。它使我們高度自信,該應用程式的主要功能是可以正常工作的。

對 JavaScript 應用程式來說有幾種方法可以編寫端到端測試。像 test cafe 這樣的程式會記錄您在瀏覽器中執行操作並將其作為測試源重播。

還有類似 nightwatch 的專案,可讓你用 JavaScript 編寫測試專案。我會推薦使用類似 nightwatch 的庫。拿起來直接用很容易,該測試執行速度比記錄的測試更快。

也就是說,night1qtch 的測試還是比較慢的。一套200個單元測試需要花費幾分鐘的時間,一套200個端到端測試僅需要幾分鐘時間來執行。

端到端測試的另一個問題是難以除錯。當測試失敗時,很難找出失敗的原因,因為測試涵蓋了太多功能。

結語

要有效地測試基於前端元件的 Web 應用程式,你需要三種型別的測試:單元測試,快照測試和 e2e 測試。

你應該對每個元件進行多個單元測試,對每個元件進行一次或兩次快照測試,以及測試連結在一起的多個元件的一次或兩次端到端測試。

整體單元測試將涵蓋大部分測試,你將有一些快照測試和一些 e2e 測試。

如果你遵循前端測試金字塔,你就可以使用殺手級測試套件建立可維護的 Web 應用程式。

你可以在 GitHub 上看到應用程式的快照測試、單元測試和端到端測試的示例原始碼庫。

相關文章