规范前端单元测试需聚焦可执行、易维护的标准:明确分层边界(只测纯逻辑、组件行为、自定义hook)、统一命名与组织、覆盖关键边界(空值、极端值、异步失败、状态临界点)、标准化断言与mock(一测一断言、toEqual优先、mock显式声明)。

团队前端单元测试要写得规范、可持续,关键不是堆用例数量,而是建立可执行、易维护、能落地的一套标准。它不是技术选型文档,而是每个成员每天都会参考的协作契约。
明确测试范围和分层边界
避免“什么都测”导致精力分散或重复覆盖:
- 只测纯逻辑函数:工具类(如日期格式化、金额计算)、业务计算方法、状态转换函数等,输入确定、无副作用
- 组件测试聚焦行为而非渲染细节:验证 props 变化是否触发预期状态、用户交互(点击/输入)是否发出正确 action 或调用回调,不校验 DOM 结构或 class 名
-
不测第三方库行为:比如不用测
useState是否更新了 state,但要测你封装的自定义 hook 在特定输入下是否返回期望值 -
网络、定时器、localStorage 等外部依赖必须 mock:用
jest.mock()或vi.mock()拦截,确保测试不发真实请求、不依赖时间流逝
统一命名与组织结构
让测试文件一眼可读、便于定位:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
文件命名严格匹配被测模块:如
utils/formatDate.js→utils/formatDate.test.js;hooks/useAuth.js→hooks/useAuth.test.js -
测试描述使用完整动宾短语:写
handles empty string input,不写works;写calls onSubmit when form is valid,不写test submit -
用 describe 分组逻辑场景:例如
describe('when user is logged in', ...)、describe('validation rules', ...),每组内 test 粒度一致
强制覆盖关键边界与错误路径
不追求 100% 行覆盖率,但必须显式覆盖这些情况:
立即学习“Java免费学习笔记(深入)”;
-
空值与非法类型:
null、undefined、''、{}、[]、非预期类型(如传字符串给期待数字的函数) - 极端数值与长度:最大安全整数、负数、零、超长数组、单字符字符串、超大对象
- 异步失败场景:API 返回 401/500、Promise reject、fetch 抛错、timeout 被触发
- 状态变更临界点:表单从无效到有效、权限从无到有、loading 状态切换时机
标准化断言与 Mock 行为
减少主观判断,提升可维护性:
- 每个 test 块只 assert 一个核心行为:主逻辑输出 + 最多 1 个关键副作用(如 mock 函数是否被调用一次)
- 优先用 toEqual 而非 toBe 比较对象/数组:避免引用相等陷阱;对浮点数用 toBeCloseTo
-
mock 函数必须声明返回值或抛错:不写
jest.fn(),而写jest.fn().mockReturnValue({ ok: true })或.mockRejectedValue(new Error('timeout')) -
清理副作用:测试中修改了
localStorage或全局变量,需在afterEach中还原,或用jest.resetAllMocks()

















