Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/工程化/测试

测试

5 分钟阅读 · Note

目录树 578 篇

          • 测试
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗0Hello TypeScript共同主题↗编译选项共同主题↗常见问题共同主题↗打包优化共同主题↗打包原理共同主题↗大文件上传共同主题
  • 测试

测试

> Last Format Time:6/12/2026 21:13:41

测试分类

  • 单元测试:最小的代码单元,通常是一个函数、一个方法或一个类
  • 集成测试:多个模块、组件或服务之间的交互和接口
  • e2e测试:整个应用程序,从前端用户界面到后端服务,再到数据库和网络等所有部分
  • UI测试:用户界面的视觉元素和交互

使用测试框架,是很重要的一环,尤其是核心的utils,避免了改动核心功能时的连锁反应,能够极大的减轻测试的负担

主流测试框架:Jest、Mocha、Vitest


测试核心概念

测试金字塔

测试金字塔由 Mike Cohn 提出,是一个指导"应该写多少测试、每类测试占多少比例"的分层模型:

  • 底层 - 单元测试:数量最多、速度最快、成本最低。应当占据测试的绝大部分。
  • 中层 - 集成测试:数量适中,验证模块间协作。
  • 顶层 - 端到端测试:数量最少、速度最慢、成本最高。验证关键业务链路。

核心思想:越靠近底层的测试越多,越靠近顶层的越少,整体呈金字塔形。反过来的"冰淇淋锥"模型(E2E 居多)是反模式,脆弱且维护成本高。

测试覆盖率

覆盖率衡量"测试用例执行了多少代码",是测试充分性的量化指标。常见维度:

  • 语句覆盖 (Statement):每行可执行代码是否被执行
  • 分支覆盖 (Branch):每个 if/else、switch 等分支是否都被走到
  • 函数覆盖 (Function):每个函数是否被调用过
  • 行覆盖 (Line):每行是否被执行

常见误区:覆盖率不是越高越好,100% 覆盖率 ≠ 0 bug。盲目追求 100% 会导致为覆盖率而写测试,反而失去对核心业务逻辑的关注。行业经验:70%~80% 是性价比区间,重点覆盖核心业务和复杂分支。

工具:Jest 自带 --coverage 标志,背后基于 Istanbul/nyc。

Mock / Stub / Spy

测试替身(Test Double)的三种常见角色,名字容易混:

  • Mock:模拟对象,验证行为。关心"被没被调用、调用几次、传了什么参数"。
  • Stub:模拟对象,返回预设值。只关心"被调用时给我什么数据",不验证是否被调用。
  • Spy:包装真实对象,记录调用信息。不改变行为,只观察真实调用。

Jest 提供:

  • jest.fn():创建 Mock 函数
  • jest.spyOn(obj, 'method'):Spy 一个真实方法,可保留原行为或 mock 掉
  • jest.mock('./module'):自动 mock 一个模块

判断用哪种:

  • 要"打桩返回假数据" → Stub
  • 要"断言函数被调用了几次" → Mock
  • 要"保留原行为但记录调用" → Spy

TDD vs BDD

TDD(Test-Driven Development)测试驱动开发,强调"先写测试再写实现":

  • 流程:红(写一个失败的测试)→ 绿(写最小实现让测试通过)→ 重构
  • 关注点:代码功能的正确性
  • 适用:函数、模块级别的单元测试

BDD(Behavior-Driven Development)行为驱动开发,强调"用自然语言描述业务行为":

  • 流程:用 Given-When-Then 描述场景 → 实现 → 自动化
  • 关注点:业务行为,促进产品/开发/测试三方对齐
  • 工具:Cucumber、Jest-cucumber

简单区分:TDD 是"开发者写测试驱动开发",BDD 是"业务人员写场景驱动开发"。


测试框架

Jest

jest一般是开发环境依赖,不需要添加到生产环境中去,一般是使用commonJS,但是经过配置也可以使用ESM语法。

Vitest

Vitest内置一个无头浏览器。

>无头浏览器是一种没有图形用户界面的Web浏览器。 它具备完整浏览器引擎(如Chromium、WebKit)的所有能力,可以解析HTML、CSS、执行JavaScript、渲染页面、处理Ajax请求等,但不会在屏幕上显示任何页面内容。所有操作都由程序或命令行自动控制。


A/B 测试

A/B测试,简单来说,就是一种通过对比两个版本来做决策的科学实验方法。

它的核心思路是:为同一个目标,设计出A和B两个不同的方案。然后,让流量相似的两组用户随机看到其中一个版本。最后,通过分析用户的实际行为数据(比如点击率、转化率),来判断哪个版本的效果更好。

一个经典的例子是:一家电商网站想优化"购买按钮"的颜色。他们让50%的用户看到红色的A版本(原始版),50%的用户看到绿色的B版本(新版)。测试结果显示,绿色版本的购买点击率高出20%,那么新版本就胜出,可以被正式采用。

A/B测试有四个核心特征:

  • 同时测试:A和B版本必须在同一时间段内运行,避免季节性或其他时间因素干扰。
  • 随机分组:用户被随机分配到不同版本,确保各组用户特征(如年龄、地域)在统计上相似,避免偏差。
  • 单一变量:最严谨的A/B测试一次只改变一个变量,这样就能清楚地知道,效果变化是由哪个改动引起的。
  • 数据驱动:最终决策不靠个人感觉或职位高低,完全依赖实验数据说话的统计结果。

在互联网行业,A/B测试的应用非常广泛:

  • 产品优化:测试App的界面布局、按钮文案、注册流程等,很多新功能会先通过A/B测试小范围验证。
  • 增长黑客:优化落地页、邮件营销标题、推送通知的文案,提高用户转化和留存。
  • 算法推荐:同时运行推荐商品或视频的不同算法模型,比较哪个点击率更高。
  • 广告投放:测试不同广告词、图片或受众定向,用效果最好的组合去大规模投放。

总的来说,A/B测试就像是互联网世界的"科学对照实验",帮人们从"我觉得..."的经验主义,转向"数据证明..."的理性决策。