标准答案

  1. 单元测试适合工具函数、数据转换、校验规则、状态计算、复杂分支和异常边界。
  2. 组件测试适合表单交互、按钮状态、错误提示、加载态、权限展示和组件事件。
  3. E2E 测试适合登录、支付、下单、发布、审批等必须跨页面、跨接口验证的关键流程。
  4. 单元测试定位快、成本低;组件测试更贴近 UI;E2E 最接近用户但更慢更脆。
  5. 测试选择要看收益和稳定性,能在低层测清楚的逻辑不要全部推给 E2E。

题目解析

一个常见判断是:如果不需要 DOM 和浏览器,就优先单元测试;如果重点是用户如何操作组件,就用组件测试;如果要确认多个页面、接口和真实浏览器链路,就用 E2E。

组件测试不应该只断言内部实现细节。更推荐按用户可见结果写断言,比如输入错误时是否出现提示,点击保存时是否进入 loading,接口失败时是否显示错误状态。

E2E 要少而关键。它适合保护核心流程,不适合覆盖每个分支。否则 CI 时间、环境依赖和偶发失败会吞掉大量维护成本。

代码示例

同一个功能可以按风险拆到不同测试层级。

Text
password validator:
  unit test

login form interaction:
  component test

login and enter dashboard:
  E2E test

常见误区

  • 用 E2E 覆盖所有表单规则,导致测试慢且失败难定位。
  • 组件测试断言内部变量名或组件私有实现,重构后无意义失败。
  • 只测成功路径,不测加载、失败、空状态和权限状态。

作者信息