本文介绍使用Jest进行JavaScript单元测试,涵盖基础测试、mock函数、模块模拟及高级技巧;2. 通过示例展示如何用expect、jest.fn()、jest.mock()和jest.spyOn隔离依赖并验证行为;3. 强调测试应关注行为而非实现,建议合理使用mock并清理状态以确保可靠性。

测试驱动开发(TDD)在现代 JavaScript 开发中扮演着重要角色,而 Jest 作为目前最流行的测试框架之一,提供了简洁的 API 和强大的功能,让编写单元测试变得高效且可靠。本文将介绍如何使用 Jest 编写高质量的单元测试,并掌握关键的 mock 技巧。
理解单元测试与 Jest 基础
单元测试关注的是最小可测代码单元,比如一个函数或类方法。Jest 提供了开箱即用的体验,无需复杂配置即可运行测试。
安装 Jest:
npm install –save-dev jest
在 package.json 中添加脚本:
立即学习“Java免费学习笔记(深入)”;
“scripts”: { “test”: “jest”}
编写一个简单的函数并测试它:
// math.jsfunction add(a, b) { return a + b;}module.exports = { add };// math.test.jsconst { add } = require(‘./math’);test(‘adds 1 + 2 to equal 3’, () => { expect(add(1, 2)).toBe(3);});
运行 npm test 即可看到测试通过。Jest 的 expect().toBe() 使用严格相等,适合基本类型比较。
Mock 函数:控制外部依赖
在真实项目中,函数常依赖外部模块、API 或定时器。使用 mock 可以隔离这些依赖,确保测试只关注当前逻辑。
Jest 提供 jest.fn() 创建模拟函数:
test(‘calls callback once’, () => { const mockFn = jest.fn(); someFunction(mockFn); expect(mockFn).toHaveBeenCalledTimes(1);});
你还可以为 mock 函数指定返回值:
mockFn.mockReturnValue(‘hello’);expect(mockFn()).toBe(‘hello’);
查看调用参数也很方便:
expect(mockFn).toHaveBeenCalledWith(‘arg1’);
Mock 模块:替换整个依赖模块
当你的代码引入了外部库(如 axios、fs),可以用 jest.mock() 替换整个模块。
// api.jsconst axios = require(‘axios’);async function fetchUser(id) { const res = await axios.get(`/users/${id}`); return res.data;}// api.test.jsconst axios = require(‘axios’);jest.mock(‘axios’);test(‘fetches user data’, async () => { axios.get.mockResolvedValue({ data: { id: 1, name: ‘John’ } }); const user = await fetchUser(1); expect(user.name).toBe(‘John’); expect(axios.get).toHaveBeenCalledWith(‘/users/1’);});
这里通过 mockResolvedValue 模拟异步成功响应,避免真实网络请求。
高级 Mock 技巧与最佳实践
合理使用 mock 能提升测试效率,但过度使用可能导致测试脆弱。以下是一些实用建议:
优先测试行为而非实现细节。避免对未导出的私有函数进行 mock 或测试。 使用 jest.spyOn(object, method) 监听对象方法调用,不影响原始实现:const consoleSpy = jest.spyOn(console, ‘log’);expect(consoleSpy).toHaveBeenCalledWith(‘message’);consoleSpy.mockRestore(); // 清理对于定时器,使用 jest.useFakeTimers() 控制时间流动:jest.useFakeTimers();setTimeout(callback, 1000);jest.runAllTimers();expect(callback).toHaveBeenCalled();每个测试结束后清理 mock 状态,防止状态污染:afterEach(() => { jest.clearAllMocks();});
基本上就这些。Jest 让 JavaScript 单元测试变得直观且强大。掌握 mock 技巧后,你能更自信地重构代码,同时保障功能正确性。测试不是负担,而是开发节奏的稳定器。
以上就是JavaScript 测试驱动:Jest 单元测试编写与 mock 技巧的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1538484.html
微信扫一扫
支付宝扫一扫