SuperAPI AI 工具集

cometchat-angular-v5-testing

测试与质量

查看项目

更新于 10-21 20:28

技能介绍

用途

本技能面向需要为嵌入 CometChat 的 Angular 应用编写测试的开发者,也适用于诊断测试挂起或网络相关失败的场景。其基准为 @cometchat/chat-uikit-angular@5(已验证 5.1.0–5.2.0)。需要注意的是,Angular UI Kit 官方文档没有测试页面,因此这里的策略属于技能包自有方案,而非官方文档内容(被标记为 DOCS GAP)。

先决定要测什么

技能给出了一张测试类型与对应方法的对照:

  • 你自己的逻辑(选择、路由、状态):用 mock 掉 CometChat 的单元测试。
  • Kit 组件内部:不要测。它是第三方依赖,自带测试。
  • 应用聊天流程端到端:用 Playwright 针对真实开发应用、两个账号。
  • 实时投递:手动、两个浏览器,难以低成本自动化。

常见错误是去单元测试 kit 内部。应当测试接缝:给定一次点击,你的组件是否设置了正确的活动会话。

在单元测试中 mock CometChat

Kit 组件在构造时会打开 socket 并调用 API。若保持真实,测试会挂起、离线失败,并向线上应用写入测试数据。技能提供了一个 mock 对象示例,包含 initFromSettings、login、loginWithAuthToken、logout、getLoggedInUser、isInitialized、isCallingEnabled 等方法,均返回 resolved 值或固定值。

在 Jest 中通过 jest.mock 指向该 mock,并保留 jest.requireActual,以便真实的组件类和 ChatStateService 仍然存在——目的是让自己的接线逻辑被实际执行,只把网络部分伪造掉。

使用 TestBed 加载独立 kit 组件

这些组件是 standalone 的,因此应放入 imports,与应用中一致。若测试报错 “is not a known element”,说明被测组件自身 imports 中缺少它——这是测试捕获到的真实 bug,而非测试问题。

优先测试 ChatStateService 而非 DOM

应断言状态,而非 kit 的标记。Kit 内部会随版本变化,而你的接线不应变化。技能给出示例:mock kit 实际发出的形状(一个 subject 为 Group 的 Conversation),而不是代码恰好检查的形状。从实现反推出来的 mock 只能确认实现本身,包括其 bug。itemClick 发出的是 Conversation,传入其他任何东西都没有真正测试接线。

用 Playwright 做端到端测试

使用真实开发应用和两个种子用户。值得断言的内容包括:会话列表渲染出行;点击一行打开头部、列表和输入框;发送文本后消息出现;无控制台错误(kit 会静默失败,这能捕获很多问题);没有塌陷——断言消息列表高度非零,零高度面板是最常见的静默故障。种子用户和会话应通过 REST API 在 setup 中创建,而非通过 UI。

不值得自动化的部分

两个客户端之间的实时投递、通话(需要媒体权限和两个对端)、推送(需要真实设备和后台应用)。这些应手动验证,并在测试计划中说明,而不是编写脆弱的自动化。

常见陷阱

单元测试中未 mock CometChat 导致挂起、不稳定、离线失败;mock 整个模块却不使用 requireActual 导致自己的接线从未运行;断言 kit DOM 内部导致每次 kit 发版都失败;针对生产应用测试导致真实用户和真实数据受影响;E2E 中没有零高度断言导致最常见的视觉故障被忽略;测试中没有 teardown 导致监听器泄漏到其他 spec。

验证是否有效

单元测试离线通过;没有测试打开真实 socket;缺少 imports 条目会导致测试失败;E2E 断言非零高度且无控制台错误;手动检查有文档记录而非伪造。