# 测试指南 - 我的课程与学习记录关联 ## 📋 测试前准备 ### 1. 执行SQL脚本 ```bash # 在MySQL中执行 mysql -u root -p peidu < peidu/sql/create_course_learning_record_table.sql ``` ### 2. 重新编译后端 ```bash cd peidu/backend mvn clean compile ``` ### 3. 重启后端服务 ```bash # 停止现有服务 # 启动新服务 ``` ## 🧪 测试用例 ### 测试用例1: 开始学习课程 **测试步骤:** 1. 登录家长端账号 2. 进入"我的课程"页面 3. 点击任意已购买的课程 4. 验证是否跳转到课程学习页面 5. 验证视频是否正常播放 **预期结果:** - ✅ 成功跳转到学习页面 - ✅ 视频从头开始播放(首次学习) - ✅ 学习进度显示为0% - ✅ 后端创建学习记录 **验证SQL:** ```sql SELECT * FROM course_learning_record WHERE user_id = 1 AND course_id = 1 ORDER BY create_time DESC LIMIT 1; ``` --- ### 测试用例2: 学习进度自动保存 **测试步骤:** 1. 在课程学习页面播放视频 2. 播放30秒后 3. 查看控制台日志 4. 查看数据库记录 **预期结果:** - ✅ 控制台显示"学习进度已保存" - ✅ 数据库中 `last_position` 字段更新 - ✅ `learning_progress` 字段更新 - ✅ `learning_duration` 字段更新 **验证SQL:** ```sql SELECT id, user_id, course_id, last_position, learning_progress, learning_duration, update_time FROM course_learning_record WHERE user_id = 1 AND course_id = 1; ``` --- ### 测试用例3: 断点续播 **测试步骤:** 1. 播放视频到50%位置 2. 等待30秒(自动保存) 3. 退出学习页面 4. 重新进入该课程 5. 验证播放位置 **预期结果:** - ✅ 视频从上次位置继续播放 - ✅ 进度条显示正确的百分比 - ✅ 学习记录ID保持不变 **验证SQL:** ```sql SELECT id, last_position, learning_progress, create_time, update_time FROM course_learning_record WHERE user_id = 1 AND course_id = 1; ``` --- ### 测试用例4: 完成课程学习 **测试步骤:** 1. 播放视频至90%以上 2. 填写学习笔记(>20字) 3. 点击"完成学习"按钮 4. 查看积分奖励提示 **预期结果:** - ✅ 显示积分奖励弹窗 - ✅ 普通课程: 60积分(50基础+10笔记) - ✅ 必修课程: 210积分(50基础+10笔记+150必修) - ✅ 学习记录标记为已完成 - ✅ 用户积分余额增加 **验证SQL:** ```sql -- 1. 检查学习记录 SELECT id, is_completed, completed_time, points_awarded, notes FROM course_learning_record WHERE user_id = 1 AND course_id = 1; -- 2. 检查用户积分 SELECT balance, total_earned FROM user_points WHERE user_id = 1; -- 3. 检查积分记录 SELECT type, points, balance, source, description, create_time FROM points_record WHERE user_id = 1 ORDER BY create_time DESC LIMIT 1; ``` --- ### 测试用例5: 我的课程列表显示 **测试步骤:** 1. 返回"我的课程"页面 2. 查看课程卡片显示 **预期结果:** - ✅ 显示学习进度条 - ✅ 显示学习进度百分比 - ✅ 已完成的课程显示"已完成"标记 - ✅ 显示已获得的积分数 --- ### 测试用例6: 重复完成不重复奖励 **测试步骤:** 1. 对已完成的课程再次点击"完成学习" 2. 查看积分变化 **预期结果:** - ✅ 提示"课程已完成" - ✅ 不再发放积分 - ✅ `points_awarded` 字段不变 **验证SQL:** ```sql SELECT id, is_completed, points_awarded, completed_time FROM course_learning_record WHERE user_id = 1 AND course_id = 1; ``` --- ### 测试用例7: 必修课程额外奖励 **测试步骤:** 1. 完成一门必修课程(is_required=1) 2. 查看积分奖励 **预期结果:** - ✅ 基础奖励: 50积分 - ✅ 笔记奖励: 10积分(如有) - ✅ 必修奖励: 150积分 - ✅ 总计: 210积分(有笔记)或200积分(无笔记) **验证SQL:** ```sql -- 检查课程是否为必修 SELECT id, title, is_required FROM parent_academy_course WHERE id = ?; -- 检查积分奖励 SELECT points_awarded FROM course_learning_record WHERE user_id = 1 AND course_id = ?; ``` --- ## 🔍 调试技巧 ### 1. 查看学习记录详情 ```sql SELECT clr.*, pac.title AS course_title, pac.is_required, u.username FROM course_learning_record clr LEFT JOIN parent_academy_course pac ON clr.course_id = pac.id LEFT JOIN user u ON clr.user_id = u.id WHERE clr.deleted = 0 ORDER BY clr.update_time DESC; ``` ### 2. 查看用户积分变化 ```sql SELECT pr.*, up.balance AS current_balance FROM points_record pr LEFT JOIN user_points up ON pr.user_id = up.user_id WHERE pr.user_id = 1 ORDER BY pr.create_time DESC LIMIT 10; ``` ### 3. 统计课程完成情况 ```sql SELECT pac.title, COUNT(*) AS total_learners, SUM(CASE WHEN clr.is_completed = 1 THEN 1 ELSE 0 END) AS completed_count, ROUND(AVG(clr.learning_progress), 2) AS avg_progress FROM course_learning_record clr LEFT JOIN parent_academy_course pac ON clr.course_id = pac.id WHERE clr.deleted = 0 GROUP BY pac.id, pac.title; ``` ## ⚠️ 常见问题 ### 问题1: 学习进度不保存 **原因:** 定时器未启动或网络请求失败 **解决:** 检查控制台日志,确认定时器正常运行 ### 问题2: 积分未发放 **原因:** - 课程已完成,不重复奖励 - 学习进度<90% - 后端服务异常 **解决:** ```sql -- 检查学习记录状态 SELECT is_completed, learning_progress, points_awarded FROM course_learning_record WHERE id = ?; ``` ### 问题3: 断点续播不生效 **原因:** `last_position` 未保存或video组件未正确设置 **解决:** - 确认 `initial-time` 属性正确绑定 - 检查数据库中的 `last_position` 值 ## ✅ 测试通过标准 - [ ] 所有7个测试用例通过 - [ ] 学习进度正确保存和显示 - [ ] 断点续播功能正常 - [ ] 积分奖励正确发放 - [ ] 不重复奖励积分 - [ ] 必修课程额外奖励正确 - [ ] 我的课程列表正确显示学习状态