JavaScript 測試執行程式或 Node.js 測試執行程式透過啟用一系列測試技術(包括單元測試、整合測試和端到端測試)來幫助自動化網站和 Web 應用程式的測試過程。
Node.js 測試運行程式可自動執行測試並提供結果回饋,以協助有效識別和解決軟體開發階段的錯誤。
在本部落格中,我們將了解如何利用 Node.js 測試運行器進行自動化測試,同時探索模擬和並行測試以及測試掛鉤等方法。
什麼是 Node.js 測試運行器?
Python、Ruby 和 Go 等程式語言都有內建的測試運行器,但 JavaScript 沒有。 JavaScript 生態系統中的所有測試運行器,例如 Mocha、Jest 和 Jasmine,都是作為第三方套件建構的。
當 Node.js 在 Node.js 版本 18 中發布了一個實驗性的內建測試運行器並使該測試運行器在 Node.js 版本 20 中穩定時,這一切都發生了變化。
測試運行程序提供了多種功能,例如:
斷言庫
測試掛鉤
模擬功能
程式碼覆蓋率
測試記者
非同步檢定
為什麼要使用 Node.js 測試運行器?
Node.js 中的本機測試執行器為 JavaScript 自動化測試提供了多個優勢。下面概述了使用此測試運行程序的一些好處:
測試運行程序透過節省決定使用哪個工具的時間來簡化開發人員和測試人員的測試過程,因為它整合在 Node.js 本身中。
Node.js 測試運行器中內建的斷言庫簡化了編寫測試和獲取測試結果的過程,無需安裝其他斷言庫。
測試運行器包含程式碼覆蓋功能,以確保透過找出尚未測試的部分來測試程式碼的所有部分。
本機測試運行程式有一個稱為監視模式的功能,允許其監視測試檔案及其相依性的變更。如果偵測到任何更改,測試運行器將自動重新執行受修改影響的測試。
使用 Node.js 進行測試可以使用模擬、存根和間諜,這對於獨立於整個軟體來測試各個元件非常重要。
如何開始使用 Node.js 測試運行器?
在部落格文章的這一部分中,您將學習如何開始使用 Node.js 內建測試運行器並成功運行測試腳本。
要開始使用,請按照以下說明操作;
請確保使用 Node.js 版本 20 或更高版本,因為自版本 20 發布以來,測試運行器已完全整合到 Node.js 的核心中。
建立一個 TestRunner 目錄並使用整合開發環境 (IDE) 啟動它。例如,在這個場景中,我們使用了 VS Code。
在終端機中執行以下命令來設定 Node.js 專案:
npm init -y
在 TestRunner 目錄中建立兩個名為 src 和 tests 的新資料夾。
使用以下程式碼片段更新 package.json 檔案中的測試腳本:
"scripts": { "test": "node --test TestRunner/tests/" },
透過執行以下命令安裝 Selenium WebDriver:
npm install selenium-webdriver
`
執行下面給出的命令來安裝 ChromeDriver:
npm 安裝 chromedriver
在tests資料夾中建立一個新的started.test.js檔案。然後,將以下程式碼新增至檔案:
`
const { Builder, By, Key, 直到 } = require("selenium-webdriver");
const assert = require("assert").strict;
const { test } = require("node:test");
{ let driver; test("Setup WebDriver for Google Search Test Suite", async (t) => { driver = await new Builder().forBrowser("chrome").build(); }); test("Navigate to Google and verify title", async (t) => { await driver.get("http://www.google.com"); const title = await driver.getTitle(); assert.strictEqual(title, "Google"); }); test("Cleanup after Google Search Test Suite", async (t) => { await driver.quit(); }); }
`
上面的程式碼從 node:test 和 node:assert 匯入所需的函數,並描述了一個導航到 Google 並驗證標題的簡單測試。
執行下面給出的命令來執行測試:
節點測試/started.test.js
使用describe()和it()塊
在 Node.js 測試運行器中,您可以使用 describe() 和 it() 區塊來執行測試。 describe() 區塊用於聲明一個將相關測試組織和分組在一起的套件,而 it() 區塊用於聲明一個測試。
使用 describe()/it() 區塊的好處是它提供了一種將測試組織成相關功能或特性的區塊的方法。這對於較大的測試套件非常有用,您希望在其中保持測試整齊地組織和邏輯分組。
在 describe() 區塊內,您可以有多個定義特定測試案例的 test() 或 it() 區塊。您也可以將 describe() 區塊相互嵌套,以建立測試子群組以進行更詳細的組織。
您可以使用 describe() 和 it() 區塊編寫測試,如下所示。
在測試目錄中建立一個describeit.test.js 檔案並插入下面提供的程式碼片段:
`
描述(“表單輸入測試”,async()=> {
讓司機;
await it("Setup WebDriver", async () => { driver = await new Builder().forBrowser("chrome").build(); }); await it("should input values in a form and check their sum", async () => { await driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo"); await driver.findElement(By.id("sum1")).sendKeys(2); await driver.findElement(By.id("sum2")).sendKeys(3); await driver.findElement(By.xpath("//button[normalize-space()='Get Sum']")).click(); let sum = await driver.wait(until.elementLocated(By.id("addmessage")),10000); let sumNo = await sum.getText(); assert.strictEqual(sumNo, "5"); }); await it("Cleanup: Close the browser", async () => { await driver.quit(); }); });
`
執行下面給出的命令來執行測試:
節點測試/describeit.test.js
跳過測試
Node.js 測試運行器還允許您跳過測試。如果測試不穩定、正在測試的功能正在積極開發中、測試依賴不可用的外部依賴項,或者測試是針對已棄用的功能,則您可以跳過測試。
可以透過將skip選項傳遞給測試或呼叫測試上下文的skip()註解來跳過單一測試。避免在內建測試運行器中執行測試的註釋由指示器組成,例如skip:true、skip;'此測試已跳過'、t.skip( ) 和t.skip(“此測試被跳過”) 如此所示示例。
- 在測試目錄中建立一個skipping.test.js 檔案並插入下面提供的程式碼片段。
`
描述(“預期值嚴格相等”,async()=> {
讓司機;
driver = wait new Builder().forBrowser("chrome").build();
it("應嚴格相等", async () => {
等待 driver.get("http://www.google.com");
const title = wait driver.getTitle();
assert.strictEqual(title, "Google");
});
npm init -y
`
- 執行下面給出的命令來執行測試:
節點測試/skipping.test.js
使用測試掛鉤
Node.js 測試運行器提供了不同的測試掛鉤。掛鉤是在測試之前或之後立即運行的函數。 Node.js 測試運行器中可用的鉤子是before()、beforeEach()、after() 和afterEach() .
以下是如何使用這些鉤子的一些例子:
**在()之前*鉤子*
before() 鉤子用於準備測試環境,它在 describe 區塊中的所有測試之前運行一次。例如,您可以使用 before() 掛鉤在執行所有測試之前設定 WebDriver。
下面是如何使用 before() 鉤子:
- 在測試目錄中建立一個 beforehook.test.js 檔案並插入下面提供的程式碼片段:
`
describe("簡單表單示範標題測驗", async () => {
讓司機;
"scripts": { "test": "node --test TestRunner/tests/" },
`
- 執行下面給出的命令來執行測試:
節點測試/beforehook.test.js
**beforeEach() *Hook*
beforeEach() 鉤子在每個測試之前運行一次,用於隔離測試,使它們不會相互影響。例如,如果您必須訪問特定頁面 URL 進行幾次測試,則可以使用 beforeEach() 掛鉤在執行每個測試之前打開該 URL 頁面。
下面是如何使用 beforeEach() 鉤子:
- 在測試目錄中建立一個 beforeEachhook.test.js 檔案並插入下面提供的程式碼片段:
`
describe("簡單表單示範測試", async () => {
讓司機;
npm install selenium-webdriver
`
- 執行下面給出的命令來執行測試:
節點測試/beforeEachhook.test.js
**after() *鉤子*
after() 鉤子在所有測試執行後運行一次,用於在所有測試執行後執行清理操作。例如,如果您想在執行測試後關閉 WebDriver,可以使用 after() 鉤子。
下面是如何使用 after() 鉤子:
- 在測試目錄中建立一個 afterhook.test.js 檔案並插入下面提供的程式碼片段:
`
describe("簡單表單示範測試", async () => {
讓司機;
npm init -y
`
- 執行下面給出的命令來執行測試:
節點測試/afterhook.test.js
**afterEach() *Hook*
afterEach() 鉤子在每次測試後運行一次。它用於在每次測試後執行清理操作。例如,如果您想在每次測試後清除 cookie,可以使用 afterEach() 鉤子。
在測試目錄中建立一個 afterEachhook.test.js 檔案並插入下面提供的程式碼片段:
`
const { Builder, By, Key, 直到 } = require("selenium-webdriver");
const assert = require("assert").strict;
常數 {
描述,
它,
之前,
在每個之前,
之後,
每個之後,
} = require("節點:測試");
"scripts": { "test": "node --test TestRunner/tests/" },
`
執行下面給出的命令來執行測試:
節點測試/afterEachhook.test.js
實施模擬
Node.js 測試運行器的內建模擬功能可讓您在使用外部相依性或第三方套件的測試情況下模擬和替換函數。當這些依賴項仍處於開發階段時,它特別方便。
您可以使用模擬功能來建立間諜和存根。以下是一個範例,說明如何使用模擬功能來驗證從 API 取得資料:
首先,使用下面給出的命令安裝 axios,這是一個基於 Promise 的 HTTP 用戶端,適用於瀏覽器和 Node.js:
npm 安裝 axios
然後,建立一個index.js檔案並加入以下程式碼:
`
const axios = require("axios");
npm install selenium-webdriver
`
上面的程式碼實作了一個MakeRequest 類,該類別具有三個函數fetchDataFromAPI()、slugifyTitle() 和add🎜>slugifyTitle() 和
addToDB().
然後,建立一個mock.test.js 檔案並加入以下程式碼:
`
// 描述與mocking相關的測試
描述(“模擬測試”,async()=> {
{ let driver; test("Setup WebDriver for Google Search Test Suite", async (t) => { driver = await new Builder().forBrowser("chrome").build(); }); test("Navigate to Google and verify title", async (t) => { await driver.get("http://www.google.com"); const title = await driver.getTitle(); assert.strictEqual(title, "Google"); }); test("Cleanup after Google Search Test Suite", async (t) => { await driver.quit(); }); }beforeEach(() => mock.restoreAll());
` 在上面的程式碼中,fetchDataFromAPI 方法是從
MakeRequest 類別模擬的。為了防止函數發出網路請求,mockImplementation()方法用於傳回預先定義的輸出,可以測試特定值。
最後,mock.method() 用來建立一個間諜來測試 slugifyTitle() 函式是否被呼叫。還有,函數被呼叫了多少次,以及它的輸出是根據標題來測試的。
使用下面給出的命令執行測試:
節點測試/mock.test.js
運行並行測試
Node.js 測試運行程式可讓您同時並行執行多個測試,而不是按順序執行它們。
要在 Node.js 測試運行器中並行運行測試,您需要將 concurrency: true 參數作為第二個參數傳遞給 describe() 函數。
以下是如何使用 Node.js 本機測試運行器和 Selenium 使用並行參數並行運行測試的範例。
在tests資料夾中建立parallel.test.js文件,並加入以下程式碼:
`
描述(“電子商務網站測試”,{並發:true},async()=>{
讓司機;
npm init -y
`
執行下面給出的命令來執行測試:
節點測試/parallel.test.js
以上測試執行是在本地網格上執行的。但是,要使用 Node.js 擴充自動化測試,您可以考慮使用基於雲端的測試方法。
人工智慧驅動的測試執行平台(如 LambdaTest)可讓您在可擴展的自動化雲端基礎架構上執行 Node.js 測試,確保相容性和可靠性。
結論
總之,Node.js 測試運行程式提供了一個輕量級解決方案,用於在 Web 專案中建立和執行自動化測試。儘管它可能不包含流行測試框架中的所有功能,但其簡單性和用戶友好性使其成為開始自動化測試的絕佳選擇。
本部落格討論 Node.js 內建測試運行器的功能。它涵蓋如何使用describe() 函數及其語法創建測試,同時使用鉤子進行設定和拆卸操作,以及如何在並行線程中同時模擬和運行測試以保證JavaScript 程式碼品質和穩定性增強目的。
對於複雜的測試情況,您可能需要針對流行的框架(例如 Mocha、Jasmine 或 Jest)評估預設測試運行器,以確定哪一個最適合您的要求。
以上是如何使用 Node.js 測試運行器:詳細指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

將矩陣電影特效帶入你的網頁!這是一個基於著名電影《黑客帝國》的酷炫jQuery插件。該插件模擬了電影中經典的綠色字符特效,只需選擇一張圖片,插件就會將其轉換為充滿數字字符的矩陣風格畫面。快來試試吧,非常有趣! 工作原理 插件將圖片加載到畫布上,讀取像素和顏色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地讀取圖片的矩形區域,並利用jQuery計算每個區域的平均顏色。然後,使用

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

核心要点 利用 JavaScript 增强结构化标记可以显著提升网页内容的可访问性和可维护性,同时减小文件大小。 JavaScript 可有效地用于为 HTML 元素动态添加功能,例如使用 cite 属性自动在块引用中插入引用链接。 将 JavaScript 与结构化标记集成,可以创建动态用户界面,例如无需页面刷新的选项卡面板。 确保 JavaScript 增强功能不会妨碍网页的基本功能至关重要;即使禁用 JavaScript,页面也应保持功能正常。 可以使用高级 JavaScript 技术(

數據集對於構建API模型和各種業務流程至關重要。這就是為什麼導入和導出CSV是經常需要的功能。在本教程中,您將學習如何在Angular中下載和導入CSV文件


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器