team-leader-todo-test-guide.md 7.6 KB

待办问题功能测试指南

🎯 测试目标

验证紧急事件转为待办问题后,数据能够正确保存到数据库,页面刷新后不会消失。


📝 测试前准备

1. 确认修复已应用

检查 dashboard.ts 中的 createTodoFromEvent 方法是否包含数据库保存逻辑:

// 应该是 async 方法
async createTodoFromEvent(event: UrgentEvent): Promise<void> {
  // ...
  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 包含来源事件信息

数据示例

{
  "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. 检查代码中是否有这段逻辑:

    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团队