前端工程化 词条目录
前端Wiki/词条/单元测试

单元测试

定义对最小可测单元(函数/组件)做隔离验证的测试,是整个测试金字塔的底座

单元测试的原则是「隔离 + 快」:测一个纯函数就只测它的输入输出,不碰网络、不碰 DOM、不碰数据库——外部依赖一律 mock 掉。前端工具链是 Vitest/Jest( runner + 断言 + mock 三合一),配合 Vue Test Utils 或 React Testing Library 测组件。Vitest 与 Vite 同款配置,开箱即用、速度快,已是新项目首选。

写它最大的收益不是「找 bug」而是「敢重构」:有覆盖的代码你才敢放心改实现。实践上不必追覆盖率数字,优先覆盖纯工具函数、复杂状态逻辑与边界条件;组件层只测交互行为(点击、输入、断言渲染结果),不测内部实现细节,否则改两行样式就一堆用例失败,测试反而成了负担。测试文件与源码就近放置并统一命名,配合流水线上的一条测试命令,就能守住每次合并的质量底线。

JavaScript
// sum.test.js —— Vitest 风格(API 与 Jest 几乎一致)
import { describe, it, expect, vi } from 'vitest';
import { calcTotal } from './cart';

describe('calcTotal', () => {
  it('普通求和', () => {
    expect(calcTotal([10, 20])).toBe(30);
  });

  it('空数组返回 0', () => {
    expect(calcTotal([])).toBe(0);
  });

  it('折扣时会调用外部接口(被 mock)', () => {
    const fetchRate = vi.fn(() => 0.9);   // 假装远程折扣率
    expect(calcTotal([100], fetchRate)).toBe(90);
    expect(fetchRate).toHaveBeenCalled();
  });
});

// 命令:npx vitest          监视模式
//       npx vitest run     单次跑全部(CI 用)
⚠ 常见误区
🔗 相关词条单元测试组件测试与端到端测试
← 返回来源章节单元测试