Skip to content

Conversation

@GrinZero
Copy link
Owner

@GrinZero GrinZero commented Nov 5, 2025

概述

为 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

- 新增 CDP 消息结构验证测试
- 添加 Network 和 WebSocket 域消息测试
- 创建 CDP 测试工具和 Mock 类
- 测试消息时序、协议合规性和序列化
- 修复现有测试中的问题
- 支持不同事件触发的 CDP 消息测试

解决了项目缺乏 CDP 消息测试的问题,提供了完整的测试覆盖。

Co-authored-by: openhands <openhands@all-hands.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants