新闻中心
测试驱动开发实践_Jest单元测试编写指南
测试驱动开发遵循红-绿-重构循环:先写失败测试(红),再实现代码通过测试(绿),最后优化代码结构。使用Jest可高效编写单元测试,支持断言、异步测试、模拟和覆盖率分析,提升代码质量与可维护性。

测试驱动开发(TDD)是一种以测试为先导的软件开发方式。在编写实际功能代码之前,先编写单元测试用例,再通过实现代码让测试通过。Jest 是一个由 Facebook 开发的 J*aScript 测试框架,因其简单易用、功能强大,广泛应用于 React 项目和 Node.js 服务中。本文将介绍如何在 TDD 实践中使用 Jest 编写高质量的单元测试。
理解 TDD 的基本流程
TDD 遵循“红-绿-重构”的循环模式:
- 红(Red):先编写一个失败的测试用例,验证期望行为尚未实现
- 绿(Green):编写最简代码使测试通过
- 重构(Refactor):优化代码结构,同时确保测试仍然通过
这种流程有助于保持代码简洁、可维护,并确保每一部分都有对应的测试覆盖。
配置 Jest 环境
在项目根目录初始化 npm 并安装 Jest:
npm init -ynpm install --s*e-dev jest
在 package.json 中配置测试命令:
"scripts": { "test": "jest", "test:watch": "jest --watch" }如果测试文件使用 ES6 模块语法(import/export),需配置 Babel 或使用 Node.js 原生支持,或改用 .cjs 扩展名。对于大多数现代项目,推荐结合 babel-jest 使用。
编写第一个单元测试
假设我们要实现一个简单的加法函数 sum(a, b)。按照 TDD 步骤,先写测试:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
运行 npm test,测试会失败(红阶段)。接着创建 sum.js 文件并实现函数:
const sum = (a, b) => a + b;
module.exports = sum;
再次运行测试,应显示通过(绿阶段)。此时可以进入重构环节,比如增强参数校验,同时保证测试仍通过。
使用 Jest 的核心断言与匹配器
Jest 提供丰富的 expect 匹配器来验证各种结果:
- toBe(value):严格相等(===)
- toEqual(value):深度比较对象或数组
- toBeDefined():检查值不为 undefined
- toBeTruthy() / toBeFalsy():检查真假值
- toContain(item):检查数组或字符串是否包含某项
- toThrow():验证函数是否抛出异常
例如:
MediPro乡镇政府门户网站系统 5.1.0 UTF-8简体中文版
MediPro乡镇政府门户网站系统,适合乡镇政府机构创建地方门户网站,用以宣传本地资源,实现政务公开,促进乡镇基层信息化建设。本系统基于PHP+MYSQL开发,预设了乡镇风采、党政机构、政务公开、投资指南、服务导航、文件下载、公众互动、领导信箱等乡镇政府门户网站常用的栏目和测试数据,采用适合乡镇政府门户网站的专用模版,增强了系统的针对性和易用性。除了文章系统、图文系统、下载系统、社区交流、反馈表单
0
查看详情
test('object assignment', () => {const data = { one: 1 };
data.two = 2;
expect(data).toEqual({ one: 1, two: 2 });
});
test('throws on invalid input', () => {
expect(() => sum('a', 'b')).toThrow();
});
测试异步代码
Jest 支持 Promise 和 async/await 的测试。例如有一个异步获取用户信息的函数:
// fetchUser.jsconst fetchUser = () =>
Promise.resolve({ id: 1, name: 'John' });
module.exports = fetchUser;
对应的测试写法:
// fetchUser.test.jsconst fetchUser = require('./fetchUser');
test('should resolve user data', async () => {
const user = await fetchUser();
expect(user).toEqual({ id: 1, name: 'John' });
});
也可以使用 resolves 匹配器:
模拟(Mocking)函数与模块
在测试中,常需要隔离外部依赖,如 API 调用、数据库操作等。Jest 提供强大的 mocking 功能。
例如,有一个函数依赖于另一个函数 getPrice():
const getPrice = require('./priceUtils');
const total = (count) => getPrice() * count;
module.exports = total;
测试时可模拟 getPrice 的返回值:
const total = require('./checkout');
const getPrice = require('./priceUtils');
jest.mock('./priceUtils'); // 自动创建 mock
test('calculates total with mocked price', () => {
getPrice.mockReturnValue(10);
expect(total(5)).toBe(50);
});
覆盖率报告
Jest 可生成测试覆盖率报告。添加配置:
"scripts": {"test:coverage": "jest --coverage"
}
运行后会在项目中生成 coverage 目录,打开 index.html 可查看每行代码的覆盖情况。建议设置最低阈值以保证质量:
// jest.config.jsmodule.exports = {
collectCoverageFrom: ['src/**/*.{js,jsx}'],
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: 80
}
}
};
基本上就这些。掌握 Jest 的基本用法并坚持 TDD 流程,能显著提升代码质量和开发效率。关键是养成“先写测试”的习惯,逐步构建稳健的应用程序。不复杂但容易忽略。
以上就是测试驱动开发实践_Jest单元测试编写指南的详细内容,更多请关注其它相关文章!
# react
# 先写
# 上海seo服务有哪些
# 高端社群如何做营销推广
# 杭州小红书推广营销第三方公司
# 南宁老牌网站建设公司
# 抖音的seo运营
# 安吉租房网站建设需要
# 蚌埠专业的网站建设团队
# seo m
# 推广营销单机游戏
# 比亚迪广告推广营销费用
# 都有
# 是一个
# 有一个
# 政务公开
# 如何在
# 简体中文版
# 重构
# 单元测试
# 门户网站
# face
# npm
# node
# json
# node.js
# js
# html
# java
# es6
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
如何在 Windows 11 中启动游戏手柄设置
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
4399免费游戏网址入口 4399小游戏免费入口点开即玩
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
Go语言JSON解析深度指南:动态访问与结构体映射实践
J*aScript教程:根据元素文本内容动态设置背景色
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
mc.js游戏直达 mc.js网页免下载版本秒进地址
EMS快递官网app_中国邮政速递物流手机客户端
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
外媒分析《GTA6》定价:卖100美元可以但真没必要!
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
qq游戏跨平台入口_qq游戏多设备同步登录
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
在Typer应用中优雅地处理和重组任意命令行参数
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
TikTok网页版直接登录 TikTok网页端官方平台入口
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
电脑IP地址怎么查 查看本机IP地址的几种方法
Eclipse怎么运行工程_Eclipse工程运行配置说明
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
ACG动漫视频网入口 ACG动漫*免费正版观看地址
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
字由网在线版登录地址 字由网网页版安全入口
照顾宝贝2小游戏点击立即在线玩
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
理解J*aScript Promise的微任务队列与执行顺序
批改网学生版PC登录 批改网官网登录系统入口
汽水音乐在线解析 汽水音乐在线解析入口
微博网页版首页入口 微博电脑端官网登录链接
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
必由学官方登录入口 必由学教师学生账号快速访问
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
解决Django多数据库/多Schema环境下外键迁移问题
内存疯狂猛猛涨价:主板销量直接腰斩!
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化


2025-12-04
浏览次数:次
返回列表