使用 Jest 掌握模拟 API 调用:综合教程
使用 Jest 模拟 API 调用对于编写高效、快速且可靠的测试至关重要。本教程将指导您了解使用 Jest 的广泛库和高级场景适配器来控制模拟响应的基本技术。
在为进行 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 调用时要记住的一些提示:
- 在测试之间重置模拟:使用 beforeEach 和 afterEach 确保测试是独立的。
- 仅模拟必要的函数:避免过多模拟。专注于您的代码实际使用的函数和模块。
- 测试失败案例:模拟错误和意外响应,以测试代码如何处理失败。
- 可重用模拟装置:为常见 API 响应创建可重用模拟装置。
使用 EchoAPI 模拟 API
EchoAPI是一款优秀的API接口设计、调试和测试工具。它通过提供一个集成环境来简化开发过程,开发人员可以在其中高效地创建、测试和验证 API。 EchoAPI 的一项关键功能是支持模拟服务,允许开发人员模拟 API 响应以进行有效测试。以下是如何在 EchoAPI 中设置模拟 API:
1. 创建一个新的HTTP请求
将 URL 定义为 /echoapi/login。
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); });
对于失败响应,请按如下方式配置 JSON:
// __mocks__/axios.js export default { get: jest.fn(() => Promise.resolve({ data: {} })), post: jest.fn(() => Promise.resolve({ data: {} })), // ... };
3. 配置模拟触发条件
在Mock部分,设置请求体的触发条件。如果“email”=“test@echoapi.com”且“password”=“123456”,请选择预期响应“成功”。对于所有其他条件,选择“失败”作为预期响应。
4. 激活模拟模式
在发送此 API 请求之前启用模拟服务并切换到模拟环境。
前端开发
在前端开发中使用模拟 API 可以让您立即处理功能,而无需等待后端准备就绪。这种并行开发方法加快了整个流程。
自动化测试
模拟 API 为自动化测试提供一致的响应,使编写可靠的测试变得更加容易。 Jest 和 Cypress 等工具可以与模拟 API 集成来测试各种组件和流程。
原型制作
创建原型或概念证明时,模拟 API 可以快速设置必要的后端交互,而无需构建实际的后端服务。
结论
模拟 API 调用是编写可靠且快速的测试的一项基本技能,尤其是在处理外部依赖项时。 Jest 提供了多种模拟 API 调用的方法,从使用 jest.mock() 模拟整个模块、手动模拟模块,到使用 axios-mock-adapter 等库来实现更高级的情况。关键是根据您的需求选择正确的方法,同时保持测试独立并专注于正在测试的代码。
此外,EchoAPI 提供了强大的工具来模拟 API,从而增强您的开发和测试工作流程。通过掌握这些技术,您可以编写弹性测试并保持高效、有效的 API 交互。
那为什么要等呢?立即开始使用这些模拟技术和工具(例如 EchoAPI)来改进您的开发工作流程!
以上是使用 Jest 掌握模拟 API 调用:综合教程的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。
