如何在 Jest 中使用 fetch Mock 进行异步测试

前言

Jest 是一个测试库,它可以让我们很好地测试我们的 JavaScript 代码。测试时,有时我们需要模拟一些异步操作,如 HTTP 请求。而在测试这些操作时,我们最好不要用真正的网络请求,因为这样会增加测试持续时间、将测试从构建环境分离、对网络的依赖等原因。因此,我们使用 fetch Mock 库来模拟 HTTP 请求 / 响应。在这篇文章中,我们将从头开始学习如何使用 Jest 和 fetch Mock 进行异步测试。

安装 Jest 和 fetch Mock

首先,我们需要安装 Jest 和 fetch Mock:

npm install jest fetch-mock --save-dev

yarn add jest fetch-mock --dev

使用 fetch Mock

让我们看一下如何在 Jest 中使用 fetch Mock。假设我们的应用程序有一个获取数据并显示数据的功能。我们假设我们的“getData”方法是异步的,因此我们需要测试它。我们可以使用 fetch Mock 来模拟 HTTP 请求 / 响应。

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

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

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

在上面的代码中,我们首先使用 “fetchMock.get” 方法来模拟一个 GET 请求并返回一个将被我们的应用程序视为先前成功的响应。接下来,我们调用 “getData” 方法,并使用 “then” 块来测试返回的数据是否与我们预期的数据匹配。

使用 Jest Mocks

那么,上述代码是否完美无缺呢?并非如此。上面的测试需要真正的 HTTP 请求,因此速度较慢。另外,如果我们更改了测试数据,我们还需要更改我们的测试代码。

为了解决这两个问题,我们可以使用 Jest Mocks。Jest 提供了两种类型的 Mocks:手动 Mocks 和自动 Mocks。手动 Mocks 通常用于自定义和故障注入。自动 Mocks 在测试时自动生成它们自己的 Mocks。

首先,让我们使用 Jest Mocks 重构上面的测试:

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

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

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

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

在上面的代码中,我们首先创建一个返回所需数据的 Response 对象。接下来,我们模拟 “node-fetch” 库并使用 “fetch.mockResolvedValue” 方法模拟 HTTP 响应。最后,我们调用 “getData” 方法并测试返回的数据是否与我们预期的数据匹配。

这种方法速度更快,因为我们的测试用例不再需要真正的 HTTP 请求。如果我们更新我们的测试数据,我们只需要更新我们的 Mock 而不是我们的测试用例。

总结

在本文中,我们学习了如何在 Jest 中使用 fetch Mock 进行异步测试。我们首先了解了为什么需要使用 fetch Mock,然后介绍了如何安装 Jest 和 fetch Mock。接下来,我们编写了一个测试方法来测试我们的异步代码并模拟了 HTTP 请求 / 响应。最后,我们使用 Jest Mocks 重构了我们的测试方法,并讨论了自动和手动 Mocks。

这些知识对于编写更好的测试非常有用。这也可以帮助我们在开发过程中更好地控制我们的代码,并减少对第三方服务的依赖。

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


猜你喜欢

  • PWA 架构下的响应式设计

    前言 近年来,前端领域的技术发展迅猛,其中 PWA 技术的出现让 Web 应用的表现和体验更加接近原生应用。而响应式设计的概念也是近年来越来越受到重视,为用户提供更好的跨设备体验。

    1 年前
  • RESTful API 中常见的服务端错误与异常

    RESTful API 是一种常见的 Web 服务架构,它的设计理念是基于 HTTP 协议的,将 Web 资源以标准化的方式通过 URI、HTTP 方法、HTTP 状态码等方式进行描述。

    1 年前
  • 如何使用 Mocha 测试 Selenium 测试用例

    前言 对于前端开发人员来说,测试是非常重要的一个环节。要确保代码质量,保证系统的稳定性和可靠性,测试是必不可少的一部分。其中,自动化测试是提高测试效率的一种方式,Selenium 是自动化测试工具中使...

    1 年前
  • Redis 在高可用中的应用与实践

    1. 背景介绍 Redis 是一个高性能的 key-value 存储系统,经常用于缓存、消息队列、排行榜、计数器等场景。在高并发、大数据量的场景下,Redis 处理能力强、存储效率高、可扩展性好等特点...

    1 年前
  • CSS 布局 解决不了的场景,使用 Flexbox

    在前端开发中,CSS 布局是最基本也是最重要的技能之一。虽然 CSS 提供了多种布局方式,但是还是有一些场景使用传统的 CSS 布局无法解决。这时候就可以用 Flexbox 布局来解决这些问题。

    1 年前
  • 创建自己的 Custom Elements

    介绍 Custom Elements 是 Web Components 的基本组成部分之一,是一种可重复使用的独立组件,可以在任何 HTML 文档中使用。使用 Custom Elements,开发者能...

    1 年前
  • Webpack 常见问题解决方案

    前言 Webpack 是一个强大的前端打包工具,它可以将多个模块融合在一起,生成最终的代码包。它不仅可以打包 js、css、图片等文件,还可以通过插件机制扩展各种复杂的功能。

    1 年前
  • Web Components 中如何处理浏览器兼容性问题

    引言 随着 Web 技术的不断发展,Web 开发中的组件化也越来越受到重视。Web Components 技术是一种将页面组件化的开放标准,它提供了一种基于原生 Web 技术的组件开发方式。

    1 年前
  • 从 ES5 到 ES6 - 闭包到箭头函数

    从 ES5 到 ES6 - 闭包到箭头函数 Javascript 的不断演进使得它成为了最受欢迎的编程语言之一。其中最显著的演进是从 ES5 到 ES6。ES6 引入了许多新功能和语法糖,其中最常用的...

    1 年前
  • 异步编程基础: Promise 的使用方式详解

    在前端开发中,异步编程是非常重要的一部分,因为浏览器中大部分操作都是异步的,如果不处理好异步操作就会引起一些问题。Promise 是一种处理异步编程的解决方案。 Promise 简介 Promise ...

    1 年前
  • 如何在 Cypress 中模拟 Canvas 画布测试

    Canvas 画布是前端中经常使用的技术之一,主要用于绘制各种图形,尤其在图表等数据可视化场景中使用频繁。然而,对于 Canvas 画布的测试一直是前端开发中比较棘手的问题。

    1 年前
  • 了解 ECMAScript 2021 中的 async/await

    在现代 web 开发中,异步编程已经成为了前端开发的必备技能。然而,在 JavaScript 语言中,异步编程并不是一件容易的事情。以往使用回调函数的方式,代码层层嵌套,难以维护。

    1 年前
  • Sequelize 创建索引的方法

    在开发 Web 应用程序时,对于需要处理大量数据的情况,创建数据库索引是一种重要的优化方式。在使用 Sequelize ORM 操作数据库时,创建索引也非常简单。在本文中,我们将介绍 Sequeliz...

    1 年前
  • webpack 打包 vue+element-ui 线上单页面应用

    1. 前言 在前端开发中,使用 webpack 打包项目已经成为了必然趋势,它可以对代码进行优化,降低加载时间,提升用户体验。本文将会介绍如何使用 webpack 打包 vue+element-ui ...

    1 年前
  • 深入 GraphQL 的 Schema 和 Resolver

    GraphQL 是一种新兴的查询语言,旨在提供更灵活、高效和可扩展的数据获取方式。而Schema和Resolver是GraphQL实现的核心组件,这两个组件的深度了解和运用将有助于我们更好地理解Gra...

    1 年前
  • 使用 Docker 搭建 Nginx 反向代理服务器

    什么是 Nginx 反向代理服务器 Nginx 是一款开源的高性能 Web 服务器和反向代理服务器,在 Web 开发中被广泛使用。Nginx 反向代理服务器是一种代理服务器,它接受来自客户端的请求,然...

    1 年前
  • Node 项目中的异步问题和 Johnny-Five

    随着 Node.js 在前端开发领域的广泛应用,我们经常会遇到异步编程的问题。其中,chai 是 Node.js 中一种流行的测试框架,它在处理异步编程时经常会让人讨厌不已。

    1 年前
  • Angular 中使用可观察对象(Observable)进行异步编程

    在 Web 应用程序开发中,难免会遇到需要异步编程的情况。可观察对象是一种流式编程范式,是解决异步编程问题的工具之一。在 Angular 中,可观察对象被广泛地应用于不同的场景中,如 Http 请求、...

    1 年前
  • 如何使用 Fastify 实现统一的 API 格式输出

    在前端开发中,我们经常会涉及到编写 API 接口,而接口的格式输出对于整个项目的可维护性和开发效率有着重要的影响。本文将介绍如何使用 Fastify 实现统一的 API 格式输出,达到标准化、方便维护...

    1 年前
  • PM2 启动 Node.js 应用时如何忽略日志

    当使用 PM2 启动 Node.js 应用时,我们经常需要记录日志来跟踪应用的运行情况。但是,在某些情况下,我们可能想要忽略某些日志,以避免处理无关的信息。本文将介绍如何使用 PM2 启动应用时忽略日...

    1 年前

相关推荐

    暂无文章