搜索
首页web前端js教程如何使用 Node.js 测试运行器:详细指南

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()addToDB().

然后,创建一个mock.test.js 文件并添加以下代码:

`
// 描述与mocking相关的测试
描述(“模拟测试”,async()=> {
// 在每次测试之前重置模拟
beforeEach(() => mock.restoreAll());

{
  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();
  });
}

`

在上面的代码中,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
JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python vs. JavaScript:社区,图书馆和资源Python vs. JavaScript:社区,图书馆和资源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C到JavaScript:所有工作方式从C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript引擎:比较实施JavaScript引擎:比较实施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

超越浏览器:现实世界中的JavaScript超越浏览器:现实世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)