纯函数单元测试应覆盖正常、边界、异常三类输入,用toequal深比较对象/数组,不模拟不打桩,命名需表达行为意图。

为纯函数写单元测试最直接有效——输入确定,输出唯一,不依赖外部状态,也不产生副作用。只要覆盖典型场景,就能快速验证逻辑正确性。
明确三类输入:正常、边界、异常
一个健壮的测试用例集至少覆盖这三类情况:
-
正常输入:符合预期的数据类型和范围,比如
add(2, 3)→5 -
边界值:空、零、极值、临界长度,如
sum([])、capitalize("")、filterByStatus(items, null) -
非法输入:类型错误或无效参数,验证是否合理报错,例如
expect(() => divide(5, 0)).toThrow()
用深比较断言对象/数组结果
纯函数常返回结构化数据,不能只用 toBe 比较引用:
- 用
toEqual做深度相等判断:expect(formatUser({name: 'a'})).toEqual({name: 'A', id: expect.any(Number)}) - 对数组排序、去重等操作,可配合
toContain、toHaveLength等辅助断言 - 避免在测试中构造复杂对象字面量;必要时用工厂函数统一生成测试数据
不模拟、不打桩、不启动环境
纯函数天然隔离,测试时无需 mock、不需要 DOM、不碰 localStorage、不调用 fetch:
- 直接
import函数,传参调用,断言返回值 - 时间、随机数等不确定因素本就不该出现在纯函数里;若存在,说明它不是纯函数,应重构(如把
Date.now()提取为参数) - 测试文件本身也保持纯净:不改全局变量、不设定时器、不依赖运行时上下文
测试命名要表达行为意图
用 describe 和 it 清晰传达“做什么”和“结果应该怎样”:
- ✅
it('returns uppercase string for non-empty input' - ✅
it('returns empty string when input is null or undefined' - ❌
it('works'或it('test1'
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











