JavaScript单元测试核心是验证最小可测单元行为,Jest和Vitest为主流框架:Jest开箱即用、生态成熟;Vitest速度快、兼容Jest语法、适配Vite项目。

JavaScript 单元测试的核心是:对函数或模块的最小可测单元(比如一个纯函数、一个工具方法、一个 React 组件的逻辑)编写独立、可重复、自动化的断言,验证其行为是否符合预期。
怎么写一个基础单元测试?
以 Jest 为例,一个典型测试包含三部分:描述测试场景(describe)、定义具体用例(it / test)、执行断言(expect)。
比如测试一个加法函数:
// math.js
export const add = (a, b) => a + b;
// math.test.js
import { add } from './math.js';
test('add returns correct sum', () => {
expect(add(2, 3)).toBe(5);
expect(add(-1, 1)).toBe(0);
});
关键点:
立即学习“Java免费学习笔记(深入)”;
- 测试要隔离:不依赖网络、DOM、全局状态;必要时用 mock 模拟外部依赖
- 用例要覆盖边界情况:空值、负数、极大值、类型错误等
- 断言要明确且单一:一个 it 块最好只测一个行为
Jest:最主流的全功能测试框架
Jest 是目前生态最成熟、开箱即用程度最高的选择,尤其适合 React 项目,但也广泛用于 Node.js 和通用 JS 库。
它内置了:
- 测试运行器(runner)和断言库(expect)
- 自动模拟(jest.mock)、计时器控制(jest.useFakeTimers)
- 快照测试(expect(component).toMatchSnapshot())
- 代码覆盖率报告(jest --coverage)
配置简单,多数项目零配置即可启动。
Vitest:Vite 生态下的高性能替代方案
Vitest 由 Vite 团队开发,设计目标是“更快、更轻、更贴近现代前端开发流”。它复用 Vite 的解析和 HMR 能力,启动和重跑速度明显优于 Jest。
优势包括:
- 语法与 Jest 高度兼容(describe、it、expect 写法一致)
- 原生支持 ESM、TS、JSX,无需额外转译配置
- 内置覆盖率(基于 c8)、并发测试、类型安全提示
- 对 Vue / React / Svelte 组件测试有良好插件支持
适合新项目,尤其是已使用 Vite 的团队。
其他常用框架/工具
Mocha + Chai + Sinon:经典组合。Mocha 提供测试结构,Chai 提供丰富断言(如 expect(x).to.be.an('array')),Sinon 处理 stub/spy/mock。灵活但需手动配置,适合需要高度定制的场景。
Cypress Component Testing:主打真实渲染环境下的组件测试(尤其 React/Vue),能真正挂载组件、触发事件、检查 DOM。不是传统“单元”测试,但对 UI 逻辑验证更可靠。
Playwright Test:偏端到端,但它的 test.describe.configure({ mode: 'unit' }) 也支持轻量单元测试,适合希望统一测试工具链的团队。
基本上就这些。选 Jest 或 Vitest 覆盖大多数需求,关键是写出可维护、易读、真正保护逻辑的测试,而不是追求数量或覆盖率数字。











