用途
该技能面向已经完成 CometChat React Native 集成、需要为其编写测试的开发者。它明确限定使用场景:仅当开发者主动要求测试时才使用,构建功能本身不应附带测试。技能不会主动为项目添加测试框架、端到端套件或 CI。
主要能力
- Jest 单元测试与 SDK mock:在模块边界 mock
@cometchat/chat-sdk-react-native,避免单元测试发起真实网络请求或依赖真实凭据。示例中 mock 了init、login、logout以及AppSettings。 - 原生依赖 mock:提示同时 mock 测试路径涉及的原生模块,如
react-native-gesture-handler、react-native-svg、react-native-video、@react-native-async-storage/async-storage,否则会出现不提及 CometChat 的 NativeModule 错误。 - 关键不变量断言:重点验证初始化在登录之前完成,且登录完成前不渲染任何聊天组件;通过读取源码文件并匹配正则,检查配置中不存在 Auth Key。
- 接线而非渲染断言:验证
onItemPress触发导航、onBack返回、已打开界面可关闭等交互接线,而非断言 UI Kit 内部结构。 - Detox 端到端测试:用于只能由设备证明的场景,包括输入框在键盘弹出后仍存活、硬件返回键导航、手势响应、release 构建启动。
使用方式
前置条件为 React Native 自带 Jest,需安装渲染器:
npm install --save-dev @testing-library/react-native
在测试中通过 jest.mock 对 SDK 进行模块级 mock,示例代码见技能原文。断言 Auth Key 不存在时,读取 src/config.ts 并检查是否匹配 authKey\s*:\s*["'][A-Za-z0-9]{20,}。Detox 用于上述设备级场景。CI 方面,带 mock 的 Jest 可在任意环境运行,Detox 需要模拟器,两者均无法验证通话或推送。
适用场景
- 为聊天界面编写测试
- 在 Jest 中 mock CometChat
- 为聊天功能添加 Detox 覆盖
限制与注意事项
- 不要断言 UI Kit 内部实现(气泡标记、类名、子元素顺序),这些会随小版本变化而破坏测试。
- 不要在测试中使用真实凭据,避免网络波动与密钥泄露。
- 通话与推送需要真实硬件、真实权限和第二台设备,应记录为人工设备检查,不能声称模拟器运行已覆盖。
- 不要添加未被要求的测试。
- 验证标准:测试在无网络访问下通过;测试树中无真实凭据;
npm run verify:fences:rn-v5通过。
配套技能
cometchat-react-native-core 涵盖安装、provider 链、init→login→render,本技能假定已掌握,不再重复。