CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

测试与可观测:Vitest / RTL / Playwright / MSW / Sentry / Web Vitals / a11y

分类:前端与客户端 · 路径:docs/topics/testing-and-observability/README.md

#react#testing#playwright#sentry#web-vitals#a11y

学会测试金字塔、组件 / e2e / API mock、错误监控、性能指标与可访问性

父主题

React 应用开发:从组件到 SSR 与测试

子主题(0)

测试与可观测:Vitest / RTL / Playwright / MSW / Sentry / Web Vitals / a11y

0. 元信息

1. 学习路线

单元 / 组件测试(Vitest + RTL)→ API mock(MSW)→ 端到端(Playwright)
  → 性能(Web Vitals + Profiler)→ 错误与链路(Sentry / OpenTelemetry)
  → 可访问性(axe / 键盘 / 焦点)→ CI / CD 集成

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成,每段都有可量化交付。

3. 九阶段表

阶段核心知识实践产出学会标准
1Vitest 配置、jsdom、happy-dom、ESM单元测试起步vitest run 跑通
2RTL:render / screen / fireEvent / userEvent组件测试套件不查 state,只查可见行为
3MSW:request handlers、reset、Node + browserAPI mock测试不依赖真后端
4Playwright:fixtures、trace viewer、shardinge2e 套件跨浏览器跑通
5Web Vitals:LCP / INP / CLS / TTFB / FCP真实用户指标上报能在 dashboard 看到 P75
6Sentry:source map、release、Replay、Performance错误监控能定位到 commit
7OpenTelemetry JS:trace / span / exporter链路追踪trace 串联前后端
8a11y:ARIA、键盘、焦点、axe-core、eslint-plugin-jsx-a11ya11y 报告WCAG 2.2 AA 通过
9CI:GitHub Actions / GitLab CI 跑 lint / typecheck / test / build / e2e完整流水线PR 状态全绿

4. 第一周任务

精简版省略固定日程。优先完成“Vitest + RTL 起步 + MSW mock 一个 endpoint + Playwright 跑一个 happy path”。

5. 阶段通用验收

精简版省略;要求测试金字塔三层都跑通且 CI 全绿。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 案例口述检查为准。

7. 综合项目

精简版省略;成果并入父主题电商 SPA 的“测试金字塔 + 监控 + a11y 报告 + CI”。

本主题贡献

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

应用上线后最大的问题不是“功能对不对”,而是“线上到底发生了什么”。测试金字塔保证“已知问题不回归”;监控把“未知问题”变成可定位的事件;可访问性保证“最弱用户也能用”。三者缺一不可:只测不监 → 线上盲飞;只监不测 → 监控告警多到没人看;只测不 a11y → 触达用户少。

9.2 概念地图

flowchart LR
  Test[测试] --> Unit[Vitest 单元]
  Test --> Comp[RTL 组件]
  Test --> API[MSW API mock]
  Test --> E2E[Playwright e2e]
  Test --> Visual[Visual regression: Chromatic / Percy]
  Observe[可观测] --> Sentry[错误 / Replay / Performance]
  Observe --> Vitals[Web Vitals]
  Observe --> OTel[OpenTelemetry trace]
  Observe --> Logs[结构化日志]
  A11y[可访问性] --> ARIA
  A11y --> Keyboard[键盘 / 焦点]
  A11y --> Axe[axe-core / Pa11y]
  A11y --> ESLint[eslint-plugin-jsx-a11y]
  CI[CI / CD] --> Lint
  CI --> Typecheck
  CI --> Unit
  CI --> E2E
  CI --> Build
  CI --> Deploy

9.3 基础知识讲解

9.3.1 论文 / 规范

9.3.2 书

9.3.3 博客 / 文档

9.3.4 人物

9.3.5 方法

9.4 经典问题与经典案例

#问题为什么重要最简答案或证据
1e2e 跑得太慢跑全套冒烟拆分 smoke / regression;用 Playwright sharding
2单元测试查 state一改实现全坏改查文本 / role / aria-label
3MSW handler 与 dev 不同步测试过、生产坏复用同一份 handler
4Sentry 堆栈是压缩代码看不懂上传 source map;CI 设 SENTRY_AUTH_TOKEN
5LCP 一直高首屏 SSR 慢 / 大图<Image priority> / preload / 减小 JS
6INP 差长任务拆 effect;用 useTransition;web worker
7CLS 差图片 / 字体 / 动态插入设宽高;font-display: swap + size-adjust
8a11y 报“button missing label”<button> 没文字aria-label;或塞 <span>
9焦点在 Modal 关闭后跑走a11y 灾难关闭时把焦点归还触发元素
10trace 串不起前后端没传 trace contextSSR 用 OpenTelemetry.propagation.inject;RQ 把 traceparent 加 header

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态
Vitest1+Vitest team活跃
React Testing Library16+Testing Library活跃
Playwright1.4+Microsoft活跃
MSW2+MSW team活跃
Sentry24+Functional Software活跃
Web Vitals4+Google Chrome活跃
OpenTelemetry JS1+CNCF活跃
axe-core4+Deque活跃
jest-axe9+社区活跃
Pa11y6+社区维护
eslint-plugin-jsx-a11y6+jsx-eslint活跃

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级可观察能力
L0知道测试 / 监控存在
L1看得懂基本测试与监控
L2能写组件 / API / e2e 测试
L3能搭测试金字塔、接 Sentry、看 Web Vitals 排问题
L4能设计 SLO / 错误预算 / trace 架构

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类

  1. 编程语言 2. 数据结构与算法 3. 计算机基础 4. 工程技术 5. Web 与后端 6. 前端与客户端 7. 数据与人工智能 8. 项目与职业能力 9. 安全与可靠性

本计划归属:前端与客户端 主 + 安全与可靠性 辅。


直接依赖(3)

查看知识图谱