使用 Jest 掌握模拟 API 调用:综合教程

使用 jest 模拟 api 调用对于编写高效、快速且可靠的测试至关重要。本教程将指导您了解使用 jest 的广泛库和高级场景适配器来控制模拟响应的基本技术。

使用 Jest 掌握模拟 API 调用:综合教程

在为进行 api 调用的代码编写测试时,模拟这些调用非常重要。此策略可确保您的测试可靠、快速且独立于外部服务。 jest 是一种流行的 javascript 测试框架,它提供了多种方法来轻松模拟 api 调用。让我们探索一下您可以使用的各种方法。

使用 jest.mock()

在 jest 中模拟 api 调用的一种直接方法是使用 jest.mock() 函数来模拟发出 api 请求的整个模块。这是一个例子:

// api.jsimport axios from 'axios';export const getusers = () => {  return axios.get('/users');};// api.test.jsimport axios from 'axios';import { getusers } from './api';jest.mock('axios');test('getusers returns data from api', async () => {  const users = [{ id: 1, name: 'john' }];  axios.get.mockresolvedvalueonce({ data: users });  const result = await getusers();  expect(axios.get).tohavebeencalledwith('/users');  expect(result.data).toequal(users);});

登录后复制

在这个例子中,我们使用 jest.mock(‘axios’) 自动模拟整个 axios 模块。然后,我们使用 axios.get.mockresolvedvalueonce() 来模拟下一个 axios.get 调用的响应。我们的测试验证 api 是否被正确调用并返回模拟数据。

使用手动模拟

另一种方法是通过创建 __mocks__ 文件夹并在其中放入模拟实现文件来手动模拟进行 api 调用的模块:

// __mocks__/axios.jsexport default {  get: jest.fn(() => promise.resolve({ data: {} })),  post: jest.fn(() => promise.resolve({ data: {} })),  // ...};

登录后复制

现在在您的测试中,您可以为每个测试模拟不同的响应:

// api.test.jsimport axios from 'axios';import { getusers } from './api';jest.mock('axios');test('getusers returns data from api', async () => {  const users = [{ id: 1, name: 'john' }];  axios.get.mockresolvedvalueonce({ data: users });  const result = await getusers();  expect(axios.get).tohavebeencalledwith('/users');  expect(result.data).toequal(users);});

登录后复制

通过这个手动模拟,您可以完全控制并可以使用您自己的实现来模拟不同的 axios 方法,例如 get 和 post。

使用 axios-mock-adapter

对于 axios 请求的更高级模拟,您可以使用 axios-mock-adapter 库。首先,安装它:

npm install axios-mock-adapter --save-dev

登录后复制

然后在您的测试中:

// api.test.jsimport axios from 'axios';import mockadapter from 'axios-mock-adapter';import { getusers } from './api';describe('getusers', () => {  let mock;  beforeall(() => {    mock = new mockadapter(axios);  });  aftereach(() => {      mock.reset();  });  test('returns users data', async () => {    const users = [{ id: 1, name: 'john' }];    mock.onget('/users').reply(200, users);    const result = await getusers();    expect(result.data).toequal(users);    });});

登录后复制

使用 axios-mock-adapter,您可以根据 url、参数、标头等来模拟请求。您还可以模拟错误和超时。

注入模拟的 axios 实例

如果您的代码直接使用 axios,另一种选择是在测试期间将模拟的 axios 实例注入到您的代码中:

// api.jsimport axios from 'axios';export const getusers = () => {  return axios.get('/users');};// api.test.jsimport axios from 'axios';import { getusers } from './api';jest.mock('axios', () => ({  get: jest.fn(),}));test('getusers returns data from api', async () => {  const users = [{ id: 1, name: 'john' }];  axios.get.mockresolvedvalueonce({ data: users });  const result = await getusers();  expect(axios.get).tohavebeencalledwith('/users');  expect(result.data).toequal(users);});

登录后复制

在这里,我们模拟 axios 本身,而不是整个模块,并提供我们自己的模拟 get 函数。

模拟 api 调用的技巧

使用 Jest 掌握模拟 API 调用:综合教程

以下是在 jest 中模拟 api 调用时要记住的一些提示:

在测试之间重置模拟:使用 beforeeach 和 aftereach 来确保测试是独立的。仅模拟必要的函数:避免过多模拟。专注于您的代码实际使用的函数和模块。测试失败案例:模拟错误和意外响应,以测试代码如何处理失败。可重用模拟装置:为常见 api 响应创建可重用模拟装置。

使用 echoapi 模拟 api

使用 Jest 掌握模拟 API 调用:综合教程

echoapi是一款优秀的api接口设计、调试和测试工具。它通过提供一个集成环境来简化开发过程,开发人员可以在其中高效地创建、测试和验证 api。 echoapi 的一项关键功能是支持模拟服务,允许开发人员模拟 api 响应以进行有效测试。以下是如何在 echoapi 中设置模拟 api:

1. 创建一个新的http请求

将 url 定义为 /echoapi/login。

create a new http request.jpg

2. 设置预期响应

转到设计部分并配置预期响应。

要成功响应,请按如下方式配置 json:

{  "errcode": 0,  "errstr": "success",  "data": {    "userid": "9252a47b-0e3b-98d5-dfac-526b87a5f14f",    "email": "test@echoapi.com",    "nickname": "alex"  }}

登录后复制

使用 Jest 掌握模拟 API 调用:综合教程

对于失败响应,请按如下方式配置 json:

{  "errcode": 11001,  "errstr": "User account not found",  "data": []}

登录后复制

使用 Jest 掌握模拟 API 调用:综合教程

3. 配置模拟触发条件

在mock部分,设置请求体的触发条件。如果“email”=“test@echoapi.com”且“password”=“123456”,请选择预期响应“成功”。对于所有其他条件,选择“失败”作为预期响应。

使用 Jest 掌握模拟 API 调用:综合教程

4. 激活模拟模式

在发送此 api 请求之前启用模拟服务并切换到模拟环境。

使用 Jest 掌握模拟 API 调用:综合教程

前端开发

在前端开发中使用模拟 api 可以让您立即处理功能,而无需等待后端准备就绪。这种并行开发方法加快了整个过程。

自动化测试

模拟 api 为自动化测试提供一致的响应,使编写可靠的测试变得更加容易。 jest 和 cypress 等工具可以与模拟 api 集成来测试各种组件和流程。

原型制作

创建原型或概念证明时,模拟 api 可以快速设置必要的后端交互,而无需构建实际的后端服务。

结论

模拟 api 调用是编写可靠且快速的测试的一项基本技能,尤其是在处理外部依赖项时。 jest 提供了多种模拟 api 调用的方法,从使用 jest.mock() 模拟整个模块、手动模拟模块,到使用 axios-mock-adapter 等库来实现更高级的情况。关键是根据您的需求选择正确的方法,同时保持测试独立并专注于正在测试的代码。

此外,echoapi 还提供了强大的工具来模拟 api,从而增强您的开发和测试工作流程。通过掌握这些技术,您可以编写弹性测试并保持高效、有效的 api 交互。

为什么要等呢?立即开始使用这些模拟技术和工具(例如 echoapi)来改进您的开发工作流程!

以上就是使用 Jest 掌握模拟 API 调用:综合教程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2648399.html

(0)
上一篇 2025年3月7日 08:10:14
下一篇 2025年2月24日 21:54:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 什么是 TypeScript 以及为什么要使用它?

    typescript 是一个功能强大的 javascript 扩展,它因使 web 和应用程序开发更加安全、可扩展和高效而广受欢迎。我们将探讨 typescript 是什么、为什么在您的下一个项目中考虑使用它,以及它如何改善您的开发体验。 …

    2025年3月7日
    200
  • ReExt 简介:React 开发革命

    ReExt 是一个现代工具,可让开发人员在 React 中使用 Ext JS 组件。使用 ReExt,开发人员可以高效地构建现代 React 应用程序。 React 开发面临性能管理、组件重用、跨平台兼容性等挑战。 ReExt 解决了这些问…

    2025年3月7日
    200
  • 本周 JavaScript 2

    javascript 不断发展。最新的重大更新 ecmascript 2023 (es14) 于 2023 年 6 月发布。此更新引入了多项新功能,增强了语言的功能并提高了开发人员的效率。 ecmascript 2023 的主要特性 1。顶…

    2025年3月7日
    200
  • NgSysV: Firestore CRUD templates

    该帖子系列已在 ngatesystems.com 上建立索引。您还可以在那里找到超级有用的关键字搜索工具。 最后评论:24 年 11 月 介绍 google 提供的关于 firestore crud(创建、读取、更新、删除)说明的大量在线文…

    2025年3月7日
    200
  • &#新&#关键字

    在 javascript 中,“new”关键字通过构造函数创建对象的新实例。 新关键字的目的: 对象创建。原型链接。绑定“this”并返回新创建的对象。 运作原理: 当您在构造函数中使用 new 关键字时,将执行以下步骤: 创建了一个新的空…

    2025年3月7日
    200
  • 谷歌个人资料设计

    Google 不仅是一家商业公司,而且还是一项便捷的国际服务,用于智能存储有关用户及其需求的数据。 在我看来,与 Mail 相比,这是一个规模更大的系统,涵盖了与用户合作的许多微妙之处,包括考虑到个人数据法。 当我们谈论社交网络上的个人资料…

    2025年3月7日
    200
  • 简单干净的代码#1

    更改此: if (user.active === true && user.age >= 18 && user.email !== null && user.email !== unde…

    2025年3月7日
    200
  • Astro中的神秘显示:揭开开发环境的秘密

    静态站点生成器之旅 多年来,我一直致力于 wordpress 项目,但最近我转向了 astro。借助人工智能的定制帮助,我以为我可以创建自己的主题,但那是天真的。 tailwindcss 对我来说是新的 – 我以前甚至没有使用过…

    2025年3月7日
    200
  • 为什么多个JSX标签需要包装? :包装到另一个标签或片段中

    为什么需要包裹多个JSX标签? jsx 是 javascript 的语法扩展。您可以在 javascript 文件中编写 html 格式。 使用 JSX 时,您知道当您想要使用多个标签时,这些标签必须位于 wrapper 中。在这篇文章中,…

    2025年3月7日 编程技术
    200
  • TypeScript Utility Types: A Complete Guide

    tl;dr: typescript 实用程序类型是预先构建的函数,可以转换现有类型,使您的代码更干净且更易于维护。本文通过实际示例解释了基本实用程序类型,包括如何更新用户配置文件、管理配置和安全地过滤数据。 typescript 是现代 w…

    2025年3月7日
    200

发表回复

登录后才能评论