前端/移动开发面试题更新 2026-08-05

在 Node.js 环境下,你会怎样设计和组织单元测试与集成测试?请说明两者的区别及各自的实施要点。

前端/移动开发系统设计技术原理方案权衡Node.js

考察说明

考查候选人对 Node.js 测试分层、工具选型及测试实践的理解。

回答思路

  1. 【回答框架 1】单元测试针对单个函数或模块,隔离外部依赖,使用 mock、stub 或 spy 模拟数据库、网络和文件系统,确保测试快速且独立。Node.js 常用测试框架为 Jest、Mocha 或 Vitest,搭配断言库如 Chai 或内置 assert。
  2. 【回答框架 2】集成测试验证多个模块、数据库、外部 API 或中间件共同工作时的交互,使用真实或测试用的数据库实例,可通过 supertest 启动 HTTP 服务并发送请求,检查响应状态、数据和副作用。
  3. 【回答框架 3】测试环境配置需区分开发、测试和生产,使用环境变量注入数据库连接串和第三方服务地址。测试数据库可使用内存数据库如 sqlite、mongodb-memory-server,或使用 Docker 容器运行真实数据库。
  4. 【回答框架 4】编写测试时遵循 Arrange-Act-Assert 结构,每个测试只验证一个行为,使用 describe 和 it 组织用例。测试命令放在 package.json 的 scripts 中,配合 CI 流水线在提交后运行全部测试。
  5. 【回答框架 5】异步代码测试需处理 Promise、回调或事件, Jest 和 Mocha 支持 done 回调或返回 Promise,注意超时设置和 afterEach 清理资源,避免测试间相互影响。
  6. 【关键点 1】单元测试隔离依赖,集成测试验证真实协作。
  7. 【关键点 2】Jest 提供内置断言、mock 和覆盖率工具,适合多数 Node.js 项目。
  8. 【关键点 3】使用 supertest 对 HTTP 接口进行集成测试,搭配真实或内存数据库。
  9. 【关键点 4】CI 中运行测试,设置合理超时并清理测试数据。
  10. 【关键点 5】异步测试需正确等待完成,避免未捕获的 Promise 拒绝。
  11. 【易错点 1】过度使用 mock 导致测试脱离真实行为,集成测试覆盖不足。
  12. 【易错点 2】测试数据库与生产配置不一致,产生环境相关的假失败。
  13. 【易错点 3】未清理异步资源或定时器,造成测试泄漏和顺序依赖。