library-picturebook-activity/docs/project/09-test-results.md
En 98e9ad1d28 feat(前端): 测试环境登录框支持自动填充测试账号
通过 VITE_AUTO_FILL_TEST 环境变量控制,在 .env.test 中启用,
使测试环境构建后登录框也能自动填充测试账号,方便测试人员使用。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 17:03:22 +08:00

102 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 测试执行结果报告
## 执行时间2026-03-24
---
## 一、测试发现的问题及修复
### 共发现 4 个 Bug全部已修复
| 编号 | 严重度 | 问题描述 | 根因 | 修复方式 |
|------|--------|---------|------|---------|
| BUG-01 | **致命** | 创建活动时 visibility/targetCities/ageMin/ageMax 字段未写入数据库,创建后全是默认值 `designated` | `contests.service.ts` 的 create 方法中遗漏了新增字段的赋值 | 在 create data 中添加 `visibility`, `targetCities`, `ageMin`, `ageMax` 字段赋值 |
| BUG-02 | **致命** | 创建 `targeted` 类型活动时 DTO 校验报错 "visibility must be one of the following values: public, designated, internal" | `Visibility` 枚举中缺少 `TARGETED = 'targeted'` | 在 `create-contest.dto.ts` 的 Visibility 枚举中添加 `TARGETED` |
| BUG-03 | **高** | 公众端登录用户访问活动列表时targeted 活动不根据用户画像过滤(返回 0 条) | `@Public()` 装饰器让 JwtAuthGuard 完全跳过 JWT 解析,导致 `req.user` 始终为空 | 重写 `JwtAuthGuard``@Public()` 接口有 Bearer token 时仍解析 JWT但不强制要求 |
| BUG-04 | **高** | 报名 targeted 活动返回 404 "活动不存在或未公开" | `registerActivity` 方法中活动查询条件硬编码 `visibility: 'public'`,未包含 `targeted` | 改为 `visibility: { in: ['public', 'targeted'] }` |
### 同步修复update 接口
| 问题 | 修复 |
|------|------|
| 编辑活动时 visibility/targetCities/ageMin/ageMax 不会更新 | 在 update 方法中添加这 4 个字段的处理逻辑 |
---
## 二、数据库测试结果
| 编号范围 | 测试项数 | 通过 | 失败 | 说明 |
|---------|---------|------|------|------|
| DB-01 ~ DB-12 | 12 | 12 | 0 | 表结构、约束、默认值全部正确 |
| DB-13 ~ DB-18 | 6 | 6 | 0 | 租户、角色、权限数据完整 |
| DB-19 ~ DB-23 | 5 | 5 | 0 | 菜单分配正确 |
| **合计** | **23** | **23** | **0** | |
---
## 三、后端 API 测试结果
| 编号范围 | 模块 | 测试项数 | 通过 | 修复后通过 |
|---------|------|---------|------|-----------|
| API-01 ~ API-10 | 公众认证 | 8(已测) | 8 | - |
| API-11 ~ API-20 | 子女管理 | 6(已测) | 6 | - |
| API-21 ~ API-30 | 活动浏览 | 5(已测) | 3 | 5修复 BUG-03 后) |
| API-31 ~ API-35 | 定向推送 | 3(已测) | 0 | 3修复 BUG-03 后) |
| API-36 ~ API-48 | 活动报名 | 7(已测) | 5 | 7修复 BUG-04 后) |
| API-57 ~ API-60 | 我的数据 | 2(已测) | 2 | - |
| API-61 ~ API-64 | 公众用户管理 | 2(已测) | 2 | - |
| API-65 ~ API-69 | 管理端认证 | 4(已测) | 4 | - |
| **已测合计** | | **37** | **30** | **37** |
### 待执行的 API 测试
以下测试项因需要特定数据状态(报名通过后才能测提交),留到全链路测试中覆盖:
- API-49~56: 作品提交(需要报名通过状态)
- API-04, API-06, API-07: 注册边界(密码太短、手机号、手机号重复)
- API-15~20: 子女详情/更新/删除完整测试
---
## 四、已修复文件清单
| 文件 | 修改内容 |
|------|---------|
| `backend/src/contests/contests/dto/create-contest.dto.ts` | Visibility 枚举添加 `TARGETED` |
| `backend/src/contests/contests/contests.service.ts` | create 方法添加 visibility/targetCities/ageMin/ageMaxupdate 方法添加同样 4 个字段 |
| `backend/src/auth/guards/jwt-auth.guard.ts` | @Public() 接口有 token 时尝试解析 JWT不强制 |
| `backend/src/public/public.service.ts` | registerActivity 活动查询条件支持 targeted |
---
## 五、待执行测试
### 前端测试FE-01 ~ FE-92
需要在浏览器中手动执行,建议按以下顺序:
1. 公众端登录/注册FE-01~09
2. 活动大厅FE-10~15
3. 活动详情按钮状态FE-16~35
4. 个人中心 + 子女管理FE-36~48
5. 管理端登录FE-57~61
6. 超管端FE-62~80
7. 广东省图端FE-81~86
8. 评委端FE-87~92
9. 响应式FE-53~56
### 全链路测试4.1 ~ 4.4
需要按照测试方案中的步骤跨端执行完整业务流程。
---
## 六、测试环境
| 项目 | 值 |
|------|-----|
| 后端 | http://localhost:3234 |
| 前端 | http://localhost:3000 |
| 数据库 | mysql://root@localhost:3306/lesingle-creation-test |
| 测试活动 | ID=1(公开), ID=2(仅内部), ID=3(定向广州6-12岁) |
| 测试用户 | testuser01(广州,有子女), beijing_user(北京), demo(默认) |