# 最终测试清单

## ✅ 代码已完成

所有修复和优化都已完成：
- ✅ 移除了不支持的 API
- ✅ 添加了详细日志
- ✅ 添加了状态监听
- ✅ 添加了 userId 格式验证
- ✅ 优化了组件结构

## 📋 测试前准备

### 1. 清除缓存
```
微信开发者工具 → 工具 → 清除缓存 → 全部清除
```

### 2. 重新编译
```
点击"编译"按钮，确认没有错误
```

### 3. 检查后端接口
确保后端返回正确的 userId 格式（字符串）

## 🧪 测试步骤

### 测试 1：小程序端登录

**操作：**
1. 输入患者ID：`2`
2. 点击"登录"

**预期日志：**
```
=== 页面已挂载 ===
=== 已设置详细日志级别 ===
获取签名成功: { userId: "patient_2", ... }
=== 小程序端登录信息 ===
sdkAppId: 1400xxxxxx
userId: patient_2
userId 类型: string
userId 长度: 9
userSig 长度: xxx
TUICallKit 初始化成功, userId: patient_2
=== TUICallKit 初始化完成，等待来电 ===
=== TUICallKit 组件已挂载 ===
当前通话状态: IDLE
完整状态信息: { ... }
```

**预期界面：**
```
当前登录: patient_2
通话状态: IDLE
```

**检查点：**
- [ ] userId 类型是 `string`
- [ ] userId 值是 `patient_2`（包含下划线）
- [ ] userId 长度是 9
- [ ] 没有警告信息

### 测试 2：Web 端发起呼叫

**操作：**
1. Web 端打开患者详情页
2. 点击"视频通话"按钮

**预期日志（Web 端）：**
```
=== 发起一对一通话 ===
后端返回的 patientUserId: patient_2
最终使用的 targetUserId: patient_2
通话已发起，目标用户: patient_2
```

**预期日志（小程序端）：**
```
[tuikit engine wasm] onNewMessageReceived
=== 通话状态变化 === calling
可能的状态值: idle, calling, connected
=== 通话角色 === callee
=== 通话类型 === 1 或 2
=== 是否群组通话 === false
```

**预期界面（小程序端）：**
```
- 通话状态从 IDLE 变为 calling
- TUICallKit 组件自动显示来电界面
- 显示"接听"和"拒绝"按钮
```

**检查点：**
- [ ] Web 端 targetUserId 是 `patient_2`（字符串）
- [ ] 小程序端收到来电信号
- [ ] 小程序端状态变为 `calling`
- [ ] 小程序端界面显示来电

### 测试 3：接听通话

**操作：**
1. 小程序端点击"接听"按钮

**预期结果：**
- [ ] 通话状态变为 `connected`
- [ ] 双方都能看到视频画面
- [ ] 双方都能听到声音
- [ ] 控制按钮正常工作

### 测试 4：小程序端发起呼叫

**操作：**
1. 小程序端输入：`1`
2. 点击"呼叫"

**预期日志（小程序端）：**
```
=== 准备发起呼叫 ===
输入值: 1
目标 userId: doctor_1
目标 userId 类型: string
目标 userId 长度: 8
发起通话成功, 目标用户: doctor_1
```

**预期结果：**
- [ ] 自动转换为 `doctor_1`
- [ ] Web 端收到来电
- [ ] 可以正常接听

**检查点：**
- [ ] 目标 userId 类型是 `string`
- [ ] 目标 userId 值是 `doctor_1`（包含下划线）
- [ ] 没有警告信息

## ⚠️ 常见问题

### 问题 1：userId 类型不是 string

**症状：**
```
userId 类型: number
```

**原因：** 后端返回的是数字而不是字符串

**解决：** 修改后端代码，确保返回字符串：
```php
return [
    'userId' => (string)$userId,  // 强制转换为字符串
    // ...
];
```

### 问题 2：userId 格式警告

**症状：**
```
⚠️ userId 格式可能不正确，应该包含下划线
```

**原因：** userId 不包含下划线（如：`patient2` 而不是 `patient_2`）

**解决：** 修改后端代码，确保格式正确：
```php
$userId = 'patient_' . $patientId;  // 使用下划线
```

### 问题 3：提示"对方不在线"

**症状：** 错误代码 60011

**原因：** userId 格式不匹配

**解决：**
1. 检查 Web 端日志中的 `targetUserId`
2. 检查小程序端日志中的 `userId`
3. 确保两者完全一致

## 📊 成功标准

### 登录成功
- ✅ userId 类型是 `string`
- ✅ userId 格式是 `prefix_number`（如：`patient_2`）
- ✅ 没有格式警告
- ✅ 界面显示正确的 userId

### 接收来电成功
- ✅ 收到 `onNewMessageReceived` 事件
- ✅ 状态变为 `calling`
- ✅ 界面自动显示来电
- ✅ 可以正常接听

### 发起呼叫成功
- ✅ 目标 userId 格式正确
- ✅ 对方收到来电
- ✅ 可以正常接听

## 🎯 完整测试流程

### 流程 1：Web → 小程序

```
1. 小程序端登录（patient_2）
   ↓
2. 检查 userId 格式（string, patient_2）
   ↓
3. Web 端发起呼叫（target: patient_2）
   ↓
4. 小程序端收到来电
   ↓
5. 状态变为 calling
   ↓
6. 界面显示来电
   ↓
7. 点击接听
   ↓
8. 通话成功
```

### 流程 2：小程序 → Web

```
1. 小程序端登录（patient_2）
   ↓
2. 输入医生ID（1）
   ↓
3. 自动转换为 doctor_1
   ↓
4. 检查格式（string, doctor_1）
   ↓
5. 发起呼叫
   ↓
6. Web 端收到来电
   ↓
7. 点击接听
   ↓
8. 通话成功
```

## 📞 需要提供的信息

如果测试失败，请提供：

### 1. 登录日志
```
=== 小程序端登录信息 ===
sdkAppId: ???
userId: ???
userId 类型: ???
userId 长度: ???
```

### 2. 呼叫日志（如果是小程序发起）
```
=== 准备发起呼叫 ===
输入值: ???
目标 userId: ???
目标 userId 类型: ???
目标 userId 长度: ???
```

### 3. 后端响应（隐藏 userSig）
```json
{
  "userId": "???",
  "patientUserId": "???",
  "sdkAppId": "???"
}
```

### 4. 错误信息
- 错误代码
- 错误提示
- 完整的控制台日志

## 📚 相关文档

- **USERID_FORMAT_CHECK.md** - userId 格式检查指南
- **READY_TO_TEST.md** - 准备测试指南
- **DEBUG_WITH_LOGS.md** - 详细日志说明

---

**最后更新：** 2024-03-04
**版本：** 5.0（最终测试版）
**状态：** ✅ 准备测试

**祝你测试顺利！🎉**
