首頁 >web前端 >js教程 >如何使用 Node.js 測試運行器:詳細指南

如何使用 Node.js 測試運行器:詳細指南

Patricia Arquette
Patricia Arquette原創
2025-01-17 18:31:11600瀏覽

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 內建測試運行器並成功運行測試腳本。

要開始使用,請按照以下說明操作;

  1. 請確保使用 Node.js 版本 20 或更高版本,因為自版本 20 發布以來,測試運行器已完全整合到 Node.js 的核心中。

  2. 建立一個 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.js 測試運行器:詳細指南

上面的程式碼從 node:testnode: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:trueskip;'此測試已跳過't.skip( )t.skip(“此測試被跳過”) 如此所示示例。

  1. 在測試目錄中建立一個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

`

  1. 執行下面給出的命令來執行測試:


節點測試/skipping.test.js

使用測試掛鉤

Node.js 測試運行器提供了不同的測試掛鉤。掛鉤是在測試之前或之後立即運行的函數。 Node.js 測試運行器中可用的鉤子是before()beforeEach()after()afterEach() .

以下是如何使用這些鉤子的一些例子:

**在()之前*鉤子*

before() 鉤子用於準備測試環境,它在 describe 區塊中的所有測試之前運行一次。例如,您可以使用 before() 掛鉤在執行所有測試之前設定 WebDriver。

下面是如何使用 before() 鉤子:

  1. 在測試目錄中建立一個 beforehook.test.js 檔案並插入下面提供的程式碼片段:

`
describe("簡單表單示範標題測驗", async () => {
讓司機;

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },

`

  1. 執行下面給出的命令來執行測試:


節點測試/beforehook.test.js

**beforeEach() *Hook*

beforeEach() 鉤子在每個測試之前運行一次,用於隔離測試,使它們不會相互影響。例如,如果您必須訪問特定頁面 URL 進行幾次測試,則可以使用 beforeEach() 掛鉤在執行每個測試之前打開該 URL 頁面。

下面是如何使用 beforeEach() 鉤子:

  1. 在測試目錄中建立一個 beforeEachhook.test.js 檔案並插入下面提供的程式碼片段:

`
describe("簡單表單示範測試", async () => {
讓司機;

    npm install selenium-webdriver

`

  1. 執行下面給出的命令來執行測試:


節點測試/beforeEachhook.test.js

**after() *鉤子*

after() 鉤子在所有測試執行後運行一次,用於在所有測試執行後執行清理操作。例如,如果您想在執行測試後關閉 WebDriver,可以使用 after() 鉤子。

下面是如何使用 after() 鉤子:

  1. 在測試目錄中建立一個 afterhook.test.js 檔案並插入下面提供的程式碼片段:

`
describe("簡單表單示範測試", async () => {
讓司機;

    npm init -y

`

  1. 執行下面給出的命令來執行測試:


節點測試/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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn