0

0

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

碧海醫心

碧海醫心

发布时间:2024-11-26 09:05:26

|

1063人浏览过

|

来源于dev.to

转载

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

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

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

使用 jest.mock()

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

// api.js
import axios from 'axios';

export const getusers = () => {
  return axios.get('/users');
};

// api.test.js
import 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.js
export default {
  get: jest.fn(() => promise.resolve({ data: {} })),
  post: jest.fn(() => promise.resolve({ data: {} })),
  // ...
};

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

// api.test.js
import 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.js
import 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.js
import axios from 'axios';

export const getusers = () => {
  return axios.get('/users');
};

// api.test.js
import 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 调用时要记住的一些提示:

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

使用 echoapi 模拟 api

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

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

1. 创建一个新的http请求

将 url 定义为 /echoapi/login。

create a new http request.jpg

Mapify
Mapify

Mapify是由Xmind推出的AI思维导图生成工具,原名ChatMind

下载

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)来改进您的开发工作流程!




相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

544

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

372

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

727

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

470

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

393

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

990

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

655

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

544

2023.09.20

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号