# 待办问题功能测试指南 ## 🎯 测试目标 验证紧急事件转为待办问题后,数据能够正确保存到数据库,页面刷新后不会消失。 --- ## 📝 测试前准备 ### 1. 确认修复已应用 检查 `dashboard.ts` 中的 `createTodoFromEvent` 方法是否包含数据库保存逻辑: ```typescript // 应该是 async 方法 async createTodoFromEvent(event: UrgentEvent): Promise { // ... const saved = await issueObj.save(); // 应该有这行 // ... } ``` ### 2. 打开浏览器开发者工具 - 按 F12 打开控制台 - 切换到 Console 标签 - 清空现有日志(可选) --- ## 🧪 测试步骤 ### 测试用例 1:创建待办问题 #### 步骤: 1. 登录设计师组长端 2. 打开工作台(Dashboard) 3. 查看左侧"紧急事件"列表 4. 找到任意一个紧急事件 5. 点击事件卡片上的"转为待办问题"按钮 #### 预期结果: - ✅ 右侧"待办任务"列表立即出现新任务 - ✅ 任务标题以【紧急】开头 - ✅ 任务显示正确的项目名称 - ✅ 任务优先级显示为红色或橙色 - ✅ 控制台显示成功日志: ``` 💾 [待办问题] 开始保存到数据库... ✅ [待办问题] 保存成功: abc123xyz ✅ [待办问题] 紧急事件已转为待办问题 ``` - ✅ 弹窗提示"已成功转为待办问题" --- ### 测试用例 2:数据库验证 #### 步骤: 1. 从控制台复制任务ID(例如:`abc123xyz`) 2. 打开 Parse Dashboard(数据库管理后台) 3. 进入 ProjectIssue 表 4. 搜索刚才的任务ID #### 预期结果: - ✅ 找到对应的记录 - ✅ `title` 字段以【紧急】开头 - ✅ `status` 字段为"待处理" - ✅ `priority` 字段为 'urgent' 或 'high' - ✅ `issueType` 字段为 'feedback' - ✅ `project` 字段正确关联项目 - ✅ `creator` 字段正确关联当前用户 - ✅ `isDeleted` 字段为 false - ✅ `data.sourceEvent` 包含来源事件信息 **数据示例**: ```json { "objectId": "abc123xyz", "title": "【紧急】客户催交付图纸", "status": "待处理", "priority": "urgent", "issueType": "feedback", "project": { "__type": "Pointer", "className": "Project", "objectId": "..." }, "creator": { "__type": "Pointer", "className": "Profile", "objectId": "..." }, "isDeleted": false, "data": { "tags": ["交付", "来自紧急事件"], "comments": [], "sourceEvent": { "eventId": "...", "eventType": "urgent", "convertedAt": "2024-12-09T08:00:00.000Z", "convertedBy": "..." } } } ``` --- ### 测试用例 3:刷新持久化测试(关键) #### 步骤: 1. 创建待办问题后(按测试用例1) 2. 记录任务标题(例如:【紧急】客户催交付图纸) 3. 按 F5 刷新页面 4. 等待数据加载完成(约2-3秒) 5. 查看右侧"待办任务"列表 #### 预期结果: - ✅ **刚才创建的待办问题仍然存在** - ✅ 任务标题、优先级、项目名称等信息完整 - ✅ 任务排序正确(按更新时间或优先级) - ✅ 控制台显示加载日志: ``` 🔍 [TodoTaskService] 开始加载待办任务... 📥 [TodoTaskService] 查询到 X 条问题记录 ✅ 加载待办任务成功,共 X 条 ``` #### ❌ 如果失败: - 任务消失 → 说明数据库保存失败 - 检查控制台是否有错误日志 - 检查 Parse Dashboard 中是否有记录 --- ### 测试用例 4:错误处理测试 #### 步骤: 1. 断开网络连接(模拟网络故障) 2. 点击"转为待办问题"按钮 3. 观察界面反馈 #### 预期结果: - ✅ 任务先出现在列表中(乐观更新) - ✅ 1-2秒后任务自动消失(保存失败回滚) - ✅ 弹窗提示错误信息: ``` 保存失败:Failed to fetch 请重试 ``` - ✅ 控制台显示错误日志: ``` ❌ [待办问题] 保存失败: TypeError: Failed to fetch ``` --- ### 测试用例 5:并发创建测试 #### 步骤: 1. 快速连续点击多个紧急事件的"转为待办问题"按钮 2. 观察待办任务列表和控制台日志 #### 预期结果: - ✅ 所有任务都成功创建 - ✅ 每个任务都有唯一的ID - ✅ 数据库中有对应数量的记录 - ✅ 刷新后所有任务都存在 --- ### 测试用例 6:关联数据验证 #### 步骤: 1. 创建待办问题 2. 点击任务卡片的"查看详情"按钮 3. 验证跳转到正确的项目详情页 #### 预期结果: - ✅ 跳转到正确的项目 - ✅ 自动打开问题板块 - ✅ 高亮显示该问题 - ✅ 问题信息与待办任务一致 --- ## 📊 测试结果记录表 | 测试用例 | 测试时间 | 测试人 | 结果 | 备注 | |---------|---------|--------|------|------| | 用例1:创建待办问题 | | | ☐ 通过 / ☐ 失败 | | | 用例2:数据库验证 | | | ☐ 通过 / ☐ 失败 | | | 用例3:刷新持久化 | | | ☐ 通过 / ☐ 失败 | | | 用例4:错误处理 | | | ☐ 通过 / ☐ 失败 | | | 用例5:并发创建 | | | ☐ 通过 / ☐ 失败 | | | 用例6:关联数据 | | | ☐ 通过 / ☐ 失败 | | --- ## 🐛 常见问题排查 ### 问题1:保存失败(401 Unauthorized) **现象**: ``` ❌ [待办问题] 保存失败: Error: Unauthorized ``` **原因**:当前用户未登录或 Session 过期 **解决方法**: 1. 退出登录 2. 重新登录 3. 再次测试 --- ### 问题2:保存失败(找不到 project) **现象**: ``` ❌ [待办问题] 保存失败: Error: Object not found ``` **原因**:紧急事件的 projectId 无效 **解决方法**: 1. 检查紧急事件的数据来源 2. 验证 event.projectId 是否正确 3. 在数据库中查询该项目是否存在 --- ### 问题3:刷新后仍然消失 **现象**:数据库有记录,但刷新后不显示 **原因**:查询条件不匹配 **检查项**: 1. 检查 `status` 字段是否为"待处理"或"open" 2. 检查 `isDeleted` 字段是否为 false 3. 检查查询日志: ``` 📥 [TodoTaskService] 查询到 X 条问题记录 ``` 如果 X=0,说明查询条件有问题 --- ### 问题4:任务重复显示 **现象**:同一个任务显示2次 **原因**:内存添加 + 数据库加载重复 **检查项**: 1. 查看控制台日志,确认是否正确使用真实ID覆盖临时ID 2. 检查代码中是否有这段逻辑: ```typescript this.todoTasksFromIssues = this.todoTasksFromIssues.map(task => { if (task.id === tempId) { return { ...task, id: saved.id }; } return task; }); ``` --- ## ✅ 测试通过标准 所有6个测试用例全部通过,具体标准: 1. ✅ 创建待办问题成功,立即显示 2. ✅ 数据库中存在对应记录,字段正确 3. ✅ **页面刷新后待办问题仍然存在**(最关键) 4. ✅ 错误处理正确,有友好提示 5. ✅ 支持并发创建,无重复或丢失 6. ✅ 关联数据正确,跳转功能正常 --- ## 📸 测试截图要求 请在测试过程中截图保存以下内容: 1. **创建成功截图**: - 待办任务列表显示新任务 - 控制台成功日志 2. **数据库记录截图**: - Parse Dashboard 中的记录详情 3. **刷新后截图**: - 刷新后待办任务仍然存在 4. **错误处理截图**: - 断网情况下的错误提示 --- ## 🚀 测试完成后 ### 如果测试通过: 1. ✅ 将测试结果记录到项目文档 2. ✅ 关闭相关 Bug 单 3. ✅ 通知相关人员功能已修复 ### 如果测试失败: 1. ❌ 记录失败的具体现象 2. ❌ 收集控制台错误日志 3. ❌ 截图保存现场 4. ❌ 提交详细的 Bug 报告 5. ❌ 通知开发人员排查 --- **文档版本**:v1.0 **更新时间**:2024-12-09 **维护人**:QA团队