首页 > web前端 > js教程 > 使用 Jest 掌握模拟 API 调用:综合教程

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

Barbara Streisand
发布: 2024-11-27 20:16:11
原创
317 人浏览过

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

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

在为进行 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 调用的技巧

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

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

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

使用 EchoAPI 模拟 API

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

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

1. 创建一个新的HTTP请求

将 URL 定义为 /echoapi/login。

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

2. 设置预期响应

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

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

// 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);
});
登录后复制
登录后复制

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

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

// __mocks__/axios.js
export default {
  get: jest.fn(() => Promise.resolve({ data: {} })),
  post: jest.fn(() => Promise.resolve({ data: {} })),
  // ...
};
登录后复制
登录后复制

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

3. 配置模拟触发条件

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

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

4. 激活模拟模式

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

Mastering Mock API Calls with Jest: A Comprehensive Tutorial

前端开发

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

自动化测试

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

原型制作

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

结论

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

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

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




以上是使用 Jest 掌握模拟 API 调用:综合教程的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板