node-network-devtools icon indicating copy to clipboard operation
node-network-devtools copied to clipboard

feat: 添加 CDP 消息的全面单元测试

Open GrinZero opened this issue 2 months ago • 0 comments

概述

为 node-network-devtools 库添加了全面的 CDP (Chrome DevTools Protocol) 消息单元测试,解决了项目严重缺乏单元测试的问题,特别是针对多进程环境下 CDP 消息测试的困难。

主要变更

🆕 新增文件

  • src/fork/tests/cdp-messages.test.ts - CDP 消息核心测试
  • src/fork/tests/cdp-test-utils.ts - CDP 测试工具和 Mock 类
  • CDP_TESTS_SUMMARY.md - 测试总结文档

🔧 修改文件

  • src/common.test.ts - 修复并增强 RequestDetail 测试
  • 删除了空的 devtool.test.ts 文件

测试覆盖范围

CDP 消息类型

  • Network 域requestWillBeSent, responseReceived, dataReceived, loadingFinished
  • WebSocket 域webSocketCreated, webSocketFrameSent, webSocketFrameReceived, webSocketClosed

测试维度

  • ✅ CDP 消息结构验证
  • ✅ 不同 HTTP 方法和状态码处理
  • ✅ 内容类型和编码处理
  • ✅ 消息时序和时间戳验证
  • ✅ RequestDetail 与 CDP 格式转换
  • ✅ 协议合规性检查
  • ✅ JSON 序列化和特殊字符处理
  • ✅ 错误处理和边界条件

技术亮点

🎯 解决多进程测试难题

  • 使用纯单元测试,避免启动实际服务器进程
  • 通过 Mock 对象模拟 DevTools 服务器
  • 消除了 "devtool connected" 等日志干扰

📋 完整的 CDP 协议支持

  • 遵循 Domain.method 命名约定
  • 包含所有必需字段验证
  • 正确的时间戳格式(秒为单位)

🔧 实用的测试工具

  • MockDevtoolServer - 模拟 DevTools 服务器
  • MockRequestCenter - 模拟请求中心
  • MockNetworkPluginCore - 模拟网络插件核心
  • 丰富的测试数据创建工具

测试结果

✓ src/common.test.ts (13)
✓ src/utils/call-site.test.ts (7)  
✓ src/utils/stack.test.ts (3)
✓ src/fork/pipe/request-header-transformer.test.ts (6)
✓ src/fork/tests/cdp-messages.test.ts (14)

Test Files  5 passed (5)
Tests  43 passed (43)

运行测试

# 运行所有测试
npm test

# 运行 CDP 特定测试
npx vitest run src/fork/tests/cdp-messages.test.ts

影响评估

  • 无破坏性变更:所有现有功能保持不变
  • 提升代码质量:增加了大量测试覆盖
  • 改善开发体验:提供了可靠的测试基础
  • 增强维护性:确保 CDP 消息处理的正确性

后续计划

  1. 可以基于这个测试框架继续扩展集成测试
  2. 添加性能测试和错误恢复测试
  3. 扩展到其他 CDP 域(Runtime、Page 等)

这个 PR 为项目建立了坚实的测试基础,确保了与 Chrome DevTools 的兼容性和可靠性。

@GrinZero can click here to continue refining the PR

GrinZero avatar Nov 05 '25 10:11 GrinZero