Protractor - Javascript測試概念
由於掌握 JavaScript 對於使用 Protractor 至關重要,本章我們將詳細瞭解 JavaScript 測試的概念。
JavaScript 測試與自動化
JavaScript是最流行的動態型別解釋型指令碼語言,但測試程式碼是最具挑戰性的任務。這是因為,與JAVA和C++等其他編譯語言不同,JavaScript中沒有編譯步驟可以幫助測試人員找出錯誤。此外,基於瀏覽器的測試非常耗時;因此,需要支援JavaScript自動化測試的工具。
自動化測試的概念
編寫測試始終是一個好習慣,因為它使程式碼更好;手動測試的問題在於它有點耗時且容易出錯。對於程式設計師來說,手動測試的過程也相當枯燥,因為他們需要重複該過程,編寫測試規範,更改程式碼並多次重新整理瀏覽器。此外,手動測試還會減慢開發過程。
由於上述原因,擁有可以自動化這些測試並幫助程式設計師擺脫這些重複且枯燥步驟的工具始終是有用的。開發人員應該如何使測試過程自動化?
基本上,開發人員可以在CLI(命令列直譯器)或開發IDE(整合開發環境)中實現工具集。然後,即使沒有開發人員的輸入,這些測試也會在單獨的程序中連續執行。JavaScript的自動化測試也不是什麼新鮮事,已經開發了許多工具,例如Karma、Protractor、CasperJS等。
JavaScript測試型別
可以針對不同目的進行不同的測試。例如,一些測試是為了檢查程式中函式的行為,而另一些測試是為了測試模組或功能的流程。因此,我們有以下兩種型別的測試:
單元測試
測試是在程式的最小可測試部分(稱為單元)上進行的。單元基本上是在隔離的情況下進行測試的,該單元不依賴於其他部分。在JavaScript的情況下,具有特定行為的單個方法或函式可以是程式碼單元,並且必須以隔離的方式測試這些程式碼單元。
單元測試的優點之一是,可以按任何順序測試單元,因為單元彼此獨立。單元測試的另一個真正重要的優點是,它可以隨時執行測試,如下所示:
- 從開發過程的開始。
- 完成任何模組/功能的開發後。
- 修改任何模組/功能後。
- 在現有應用程式中新增任何新功能後。
對於JavaScript應用程式的自動化單元測試,我們可以從許多測試工具和框架中進行選擇,例如Mocha、Jasmine和QUnit。
端到端測試
它可以定義為用於測試應用程式從開始到結束(從一端到另一端)的流程是否按設計正常工作的測試方法。
端到端測試也稱為功能/流程測試。與單元測試不同,端到端測試測試各個元件如何作為應用程式一起工作。這是單元測試和端到端測試的主要區別。
例如,假設我們有一個註冊模組,使用者需要提供一些有效資訊才能完成註冊,那麼該特定模組的E2E測試將遵循以下步驟來完成測試:
- 首先,它將載入/編譯表單或模組。
- 現在,它將獲取表單元素的DOM(文件物件模型)。
- 接下來,觸發提交按鈕的點選事件以檢查它是否有效。
- 現在,出於驗證目的,從輸入欄位收集值。
- 接下來,應驗證輸入欄位。
- 出於測試目的,呼叫虛假API來儲存資料。
每個步驟都會給出自己的結果,這些結果將與預期的結果集進行比較。
現在出現的問題是,雖然這種型別的E2E或功能測試也可以手動執行,但為什麼我們需要為此進行自動化?主要原因是自動化將使此測試過程變得容易。為此,一些可輕鬆與任何應用程式整合的可用工具是Selenium、PhantomJS和Protractor。
測試工具和框架
我們有各種用於Angular測試的測試工具和框架。以下是其中一些知名工具和框架:
Karma
Karma由Vojta Jina建立,是一個測試執行器。最初這個專案被稱為Testacular。它不是一個測試框架,這意味著它使我們能夠輕鬆地在真實的瀏覽器上自動執行JavaScript單元測試。Karma是為AngularJS構建的,因為在Karma之前,沒有用於基於Web的JavaScript開發人員的自動化測試工具。另一方面,藉助Karma提供的自動化功能,開發人員可以執行一個簡單的單個命令,並確定整個測試套件是否透過或失敗。
使用Karma的優點
與手動流程相比,以下是使用Karma的一些優點:
- 在多個瀏覽器和裝置上自動化測試。
- 監控檔案錯誤並修復它們。
- 提供線上支援和文件。
- 簡化與持續整合伺服器的整合。
使用Karma的缺點
以下是使用Karma的一些缺點:
使用Karma的主要缺點是它需要額外的工具來配置和維護。
如果將Karma測試執行器與Jasmine一起使用,則在針對一個元素具有多個ID的情況下,可用於查詢有關設定CSS的資訊的文件較少。
Jasmine
Jasmine是用於測試JavaScript程式碼的行為驅動開發框架,由Pivotal Labs開發。在Jasmine框架積極開發之前,Pivotal Labs還開發了一個類似的單元測試框架JsUnit,它具有內建的測試執行器。可以透過包含SpecRunner.html檔案或將其用作命令列測試執行器來透過Jasmine測試執行瀏覽器測試。它也可以與或不與Karma一起使用。
使用Jasmine的優點
以下是使用Jasmine的一些優點:
獨立於瀏覽器、平臺和語言的框架。
支援測試驅動開發(TDD)以及行為驅動開發。
預設情況下與Karma整合。
易於理解的語法。
提供測試間諜、偽造和直通功能,作為附加功能協助測試。
使用Jasmine的缺點
以下是使用Jasmine的一個缺點:
使用者必須在更改時返回測試,因為Jasmine在執行測試時沒有檔案監視功能。
Mocha
Mocha是為Node.js應用程式編寫的測試框架,但也支援瀏覽器測試。它與Jasmine非常相似,但它們之間的主要區別在於Mocha需要一些外掛和庫,因為它不能作為測試框架獨立執行。另一方面,Jasmine是獨立的。但是,Mocha比Jasmine更靈活。
使用Mocha的優點
以下是使用Mocha的一些優點:
- Mocha非常易於安裝和配置。
- 使用者友好且文件簡單。
- 包含具有多個節點專案的外掛。
使用Mocha的缺點
以下是使用Mocha的一些缺點:
- 它需要單獨的模組用於斷言、間諜等。
- 它還需要額外的配置才能與Karma一起使用。
QUnit
QUnit最初由John Resig於2008年作為jQuery的一部分開發,是一個功能強大且易於使用的JavaScript單元測試套件。它可用於測試任何通用的JavaScript程式碼。雖然它專注於在瀏覽器中測試JavaScript,但開發人員使用起來非常方便。
使用QUnit的優點
以下是使用QUnit的一些優點:
- 易於安裝和配置。
- 使用者友好且文件簡單。
使用QUnit的缺點
以下是使用QUnit的一個缺點:
- 它主要為jQuery開發,因此不太適合與其他框架一起使用。
Selenium
Selenium最初由Jason Huggins於2004年在ThoughtWorks作為內部工具開發,是一個開源測試自動化工具。Selenium將自身定義為“Selenium自動化瀏覽器。就是這樣!”。瀏覽器的自動化意味著開發人員可以非常輕鬆地與瀏覽器互動。
使用Selenium的優點
以下是使用Selenium的一些優點:
- 包含大型功能集。
- 支援分散式測試。
- 透過Sauce Labs等服務提供SaaS支援。
- 易於使用,文件簡單,資源豐富。
使用Selenium的缺點
以下是使用Selenium的一些缺點:
- 使用Selenium的主要缺點是它必須作為單獨的程序執行。
- 配置有點麻煩,因為開發人員需要遵循幾個步驟。