使用 Jest 测试 Node.js 应用的正确姿势

随着 Node.js 服务器端应用开发的不断普及,对于多数前端开发者而言,对 Node.js 的开发不再是一个陌生的领域。然而,在快速开发 Node.js 应用的过程中,如何保证应用的质量,以及如何有效地进行测试,仍然是一个需要掌握的技能。在本文中,我们将探讨使用 Jest 测试 Node.js 应用的正确姿势,并给出相关的指导和示例代码。

什么是 Jest?

Jest 是由 Facebook 开发的一个开源的 JavaScript 测试框架,它既可以用于前端应用的测试,也可以用于后端应用的测试。Jest 提供了完善的功能,如 mock(模拟)功能、snapshot(快照)测试、异步测试等等。Jest 广泛应用于 React 和 Node.js 社区,并且已经成为了很多公司的首选测试框架。

为什么使用 Jest 进行测试?

与其他测试框架相比,使用 Jest 有以下优点:

  1. 易于上手:Jest 是一个非常易于上手的测试框架,它提供了完善的文档和示例代码,让开发者能够快速上手使用。

  2. 全面支持异步测试:Node.js 服务器端应用通常需要进行异步操作,而 Jest 提供了完善的异步测试支持,帮助开发者更好地测试异步函数。

  3. 提供完善的 Mock 功能:在进行测试过程中,我们需要模拟一些数据或者函数,以方便测试。对于这个问题,Jest 提供了完善的 Mock 功能,使得开发者可以更加简单地进行测试。

  4. 提供了 Snapshot 测试:Jest 中的 Snapshot 功能可以帮助我们记录测试结果,并进行比较。这项功能可以帮助我们解决一些奇特的测试问题。

开始使用 Jest 测试

接下来,我们将介绍如何使用 Jest 进行 Node.js 应用的测试。在介绍之前,我们需要先进行以下两个步骤:

  1. 安装 Jest

Jest 的安装非常简单,可以使用 NPM 安装。在终端或命令行中,输入以下命令:

--- ------- ---- ----------

安装完成后,我们就可以开始使用 Jest 了。

  1. 编写待测试代码

在进行测试之前,我们需要编写待测试的代码。在本文中,我们将使用一个简单的 Node.js 的例子:

-- -----------

-------------- - -
  ---- -------- ------ ----- -
    ------ ---- - -----
  -
--

我们的应用相当简单 —— 只有一个加法模块,用于向数值添加数字并返回结果。现在,让我们实现一个基本的单元测试来测试这个模块。

-- ----------------------

----- ----- - -----------------------

---------- - - - -- ----- --- -- -- -
  ------------- ------------
---

以上代码中,我们使用 Jest 进行单元测试了。Jest 提供了一个 test 函数,用于封装我们的单元测试。test 函数接收两个参数:第一个参数是把待测试的块封装起来的函数,第二个参数是一个可选参数,用于描述测试案例。

在我们的例子中,我们描述了一条测试案例:“adds 1+2 to equal 3”。在 this case 中,我们调用 add 方法,将 1 和 2 作为参数传入,然后使用 expect 函数对 test 进行对比。expect 函数在 jest 中非常方便,我们可以使用 expect 来检查测试中的一些基本的断言。

使用 Mock 进行测试

在测试中,我们通常会遇到需要模拟一些数据或方法的情况。在 Jest 中,我们可以使用 Jest 的全局 Mock API。接下来,我们看一个使用 Jest 进行 Mock 的例子。回到我们的示例代码,我们增加一个模块来模拟实际的计算结果:

-- -----------------

-------------- - -
  ---- ----------- -- -- - - --
--

以上我们创建了一个 mock 文件,在其中我们增加了一个 add 方法。在应用代码中,我们可以使用 require() 引入 math 模块,但是在测试中,我们将使用 Jest 提供的 mock 模块。现在让我们完成一个使用 Jest 进行 Mock 的测试例子:

-- ----------------------

----- ----- - -----------------------
----- ---------- - -----------------------------

-------------------------

--------- ------ -- ------ ---- - --- - --- ------ --- -- -- -
  ------ ---
  ---------------------------------------- ---
  ---------------------------------------------
---

在以上代码中,我们首先引入了 mocks 中的 math.js 文件,并且使用 Jest 提供的 global.mock 来在我们的测试中修改引入了 math.js 文件的引用。接下来,我们在测试中调用 add(1, 2) 函数。我们现在可以使用 Jest 提供的方法来测试 add 函数。

toBeCalledWith(a, b) 测试函数是否被传入正确的参数。当传递的参数和预期的参数相符时,则返回 true。而 toHaveReturnedWith() 方法用于测试函数是否返回了正确的值。将这两个函数组合使用,我们可以测试函数调用是否满足我们的预期。

使用快照进行测试

快照测试是一个在前端应用中非常流行的测试方式。它可以帮助我们记录一些组件的渲染输出,并比对预期的输出,从而确定渲染输出是否正确。在 Node.js 应用中,快照测试也同样同样适用。在 Jest 中,我们可以轻松地实现快照测试。我们以 Node.js 的翻译服务为例,来用 Jest 实现快照测试。

-- ----------------

----- --------- - --------- -- -
  ------ ----- -- --- ---------- ------
--

-------------- - ----------

在我们的应用中,我们有一个 translate 方法,用于将一些指定的文本转换成翻译文本。现在我们使用 Jest 实现一个快照测试:

-- ---------------------------

----- ------------------ - --------------------------------
----- --------- - -------------------------------

-------------------------------------------------

--------------- ------ ------ --- ---------- -- -- -
  ----- ------ - ----------------
  ---------------------------------
---

在以上例子中,我们首先引入了 jest-serializer-html 库,并将其添加到我们的 test 环境中,这样我们可以将快照渲染成 html。接下来,我们调用我们的 the translate() 方法。我们可以使用 toMatchSnapshot() 函数来比较当前的渲染输出快照和期望的渲染输出快照。

总结

在本文中,我们学习了如何使用 Jest 对我们的 Node.js 应用进行单元测试。我们介绍了使用 Jest 的 Mock 功能,讨论了如何进行异步测试,以及如何使用快照测试记录渲染输出。通过掌握这些内容,我们可以轻松地进行可靠的测试,从而帮助我们提高 Node.js 应用的质量,提供更加优秀的用户体验。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/665266b8d3423812e46c8125


猜你喜欢

  • Enzyme 测试组件时遇到 “has no prop named ‘xxx’” 问题解决

    Enzyme 测试组件时遇到 “has no prop named ‘xxx’” 问题解决 前言 在使用 React 开发过程中,我们可以通过 Enzyme 轻松地测试组件的渲染、用户操作等行为,以保...

    5 个月前
  • 不止限于 REST:GraphQL API 的诸多优势

    什么是 GraphQL? GraphQL 是一种由 Facebook 开发的用于 API 开发的查询语言,旨在替代传统的 RESTful API。GraphQL 可以让前端开发人员更加灵活地查询和获取...

    5 个月前
  • CSS Reset 的作用与意义及应用场景汇总

    在进行前端开发时,我们通常需要为页面添加一些样式。但是不同浏览器对于相同的样式可能会有不同的解析机制,导致页面样式的不一致。这时我们就需要用到 CSS Reset 来规范浏览器对样式的默认解析机制。

    5 个月前
  • 防止 Babel 编译 CSS 的方法探究

    在前端开发中,我们经常使用 Babel 进行代码转换,以便让我们在浏览器中运行 ES6+ 的代码。但是,Babel 在转换过程中也会将 CSS、LESS 或 SCSS 等样式文件进行编译。

    5 个月前
  • MongoDB 的更新操作与性能优化

    MongoDB 作为一种 NoSQL 数据库,以其高效、灵活的特点广受开发者的喜爱。在实际开发中,我们经常需要对 MongoDB 中的数据进行更新操作,并对其进行性能优化,以确保系统的高效稳定运行。

    5 个月前
  • 在 Node.js 中使用 Chai 检验大量数据

    什么是 Chai? Chai 是一个开源的 JavaScript 测试库,可以用于在任何 JavaScript 环境中编写可读性流畅的断言。它包括两种不同的风格:BDD 和 TDD。

    5 个月前
  • Web Components 如何让你的代码控制哪个 <div> 可以被拖拽

    随着 Web 应用程序的发展,越来越多的用户期望交互性,这也意味着很多 UI 的实现都涉及到拖拽操作。但是,如果你需要在你的代码中实现这种拖拽功能,可能还需要依赖于外部库或插件。

    5 个月前
  • Redis 过期键清理的原理及实现方法

    引言 Redis 是一款高性能的内存数据库,被广泛用于缓存、消息队列、排行榜等场景。在 Redis 中,键的过期时间是一项重要功能,通过设置键值对的过期时间可以有效防止缓存数据过期后数据淘汰问题的发生...

    5 个月前
  • 在 AngularJS 程序中使用外部代码:解决不稳定的 $apply 和 $digest

    在AngularJS程序中使用外部代码:解决不稳定的$apply和$digest AngularJS是一个前端框架,可以让开发人员快速构建现代web应用程序。然而,在构建大规模、复杂的AngularJ...

    5 个月前
  • 如何使用 Node.js 实现多用户认证与权限控制

    如何使用 Node.js 实现多用户认证与权限控制 在 Web 开发的过程中,多用户认证与权限控制是非常重要的功能。Node.js 提供了一些优秀的工具和框架,可以帮助我们快速构建这些功能。

    5 个月前
  • Redux 源码剖析:从入口函数到 createStore

    本文将深入剖析 Redux 的源码,从入口函数开始一步步分析每个细节,帮助读者深入理解 Redux 并能够编写出更加高效的 Redux 应用。 入口函数 Redux 的入口函数如下: ------ -...

    5 个月前
  • Serverless 打破传统云计算的桎梏,未来发展前景大好

    传统云计算的问题 在传统的云计算中,我们需要购买虚拟机实例。这些实例是预留在集群中的,并且必须一直运行,即使它们没有得到充分利用,也必须支付相应的费用。这导致了资源浪费和高成本的问题。

    5 个月前
  • Koa2 整合 JWt 实现用户鉴权

    随着互联网技术的不断发展,用户登录和鉴权已经成为了各类网站和应用程序的基础功能之一。在前后端分离的架构中,前端通常处理用户的输入和输出,而后端则负责进行数据处理和数据库操作。

    5 个月前
  • RESTful API 中的 Swagger 文档自动生成

    随着 Web 应用的普及,RESTful API 已成为 Web 应用开发的主流方式。Swagger 是一种用于描述 RESTful API 的规范,以及用于生成 API 文档的工具,它可以帮助开发人...

    5 个月前
  • Docker 容器内部如何安装 SSH 服务

    在使用 Docker 容器化应用时,有时候需要在容器内部安装 SSH 服务,以便进行远程调试和管理。本文将详细介绍如何在 Docker 容器内部安装 SSH 服务,并提供示例代码供读者参考。

    5 个月前
  • SPA 应用中如何处理图片优化

    单页应用(SPA)是一种在使用 Web 技术构建大型前端应用程序时流行的方法。SPA 应用通常使用动态内容来实现用户体验的连续性和光滑性。其中,图片是不可或缺的组成部分,但同时也是最具占用带宽的元素之...

    5 个月前
  • ECMAScript 2018 中的 Promise 变化:返回 Promise 的 Promise 默认解包

    Promise 简介 在前端开发中,Promise 是一种非常重要的技术,它可以很好地处理异步操作。简单来说,Promise 可以把一些异步操作封装成一个 Promise 对象,当异步操作完成时,可以...

    5 个月前
  • 使用 Flask-SSE 在 Flask 中推送 Server-Sent Events 事件流

    什么是 Server-Sent Events Server-Sent Events(简称 SSE)是一种用于实现服务器推送事件流到客户端的通讯协议。相比传统的 Ajax 等客户端轮询方式,SSE 更为...

    5 个月前
  • Webpack 如何处理 Html 文件打包

    Webpack 如何处理 Html 文件打包 前言: Webpack 是一个优秀的模块化打包工具,可以对 JavaScript、CSS 等各种资源进行打包处理,但是对于 Html 的处理还需要额外的插...

    5 个月前
  • Deno 中的事件驱动编程介绍

    前端开发过程中,事件驱动编程已经成为了一个必不可少的部分。而 Deno 作为一种全新的 JavaScript 运行环境,也不例外。本文将介绍 Deno 中的事件驱动编程,并包含一些示例代码,希望能够对...

    5 个月前

相关推荐

    暂无文章