javascript如何测试代码_单元测试与集成测试有何不同?

单元测试验证单个函数或组件逻辑是否正确,隔离依赖只测输入输出;集成测试验证多个模块协作是否正常,覆盖用户路径并允许真实DOM操作。

JavaScript 测试主要靠单元测试和集成测试来保障质量,两者目标不同、范围不同、写法也不同。

单元测试:验证单个函数或组件的逻辑是否正确

单元测试聚焦最小可测单元(比如一个工具函数、一个 React 组件的渲染逻辑),隔离外部依赖(如 API 调用、定时器、DOM 操作),只关注“输入 → 输出”是否符合预期。

常用工具:Jest、Vitest、Jasmine。

  • mock 替换真实依赖(例如用 jest.mock('axios') 拦截请求)
  • 测试边界值和异常路径(如传入 null、空数组、负数时是否报错或返回合理结果)
  • 不操作真实 DOM(React 可用 @testing-library/reactrender + screen 做轻量 DOM 断言,但仍属单元测试范畴)

集成测试:验证多个模块协作是否正常

集成测试把几个已通过单元测试的模块组合起来,检查它们之间交互是否顺畅,比如组件 + API + 状态管理一起跑通一个用户登录流程。

常用工具:Cypress、Playwright、Testing Library + Jest(配合真实环境)。

  • 不 mock 接口或状态逻辑,而是启动真实服务(或用 mock server 如 MSW 模拟后端响应)
  • 覆盖关键用户路径(如“填写表单 → 提交 → 显示成功提示 → 跳转页面”)
  • 允许真实 DOM 操作和浏览器行为(点击、输入、等待异步完成)

怎么选?看你要回答什么问题

单元测试回答:“这个函数自己有没有 bug?”
集成测试回答:“这几个东西合在一起,用户能不能顺利完成任务?”

  • 开发新功能时,先写单元测试保证基础逻辑可靠
  • 上线前或重构后,补集成测试确认端到端流程没断
  • CI 流程中,单元测试快、反馈早;集成测试慢、但更贴近真实场景

小提醒:别混淆“端到端测试”和“集成测试”

端到端(E2E)测试是集成测试的子集,但范围更大——它模拟真实用户从打开浏览器到完成业务目标的全过程,通常跨系统(前端 + 后端 + 第三方服务)。而前端集成测试一般限定在本项目内多个模块的协作。

不复杂但容易忽略。