docs: 设计文档补充自动化测试框架节(Vitest+jsdom+CI 测试 workflow)
This commit is contained in:
@@ -82,11 +82,22 @@ export function answersMatch(expected: string[], given: string): boolean; // 任
|
|||||||
- DB schema(quiz JSON 存储不变)、ai-grade.ts、错题本 WrongRow、积分/达标规则、周测组卷。
|
- DB schema(quiz JSON 存储不变)、ai-grade.ts、错题本 WrongRow、积分/达标规则、周测组卷。
|
||||||
- 孩子端之外:seed、overview、记录管理全不动。
|
- 孩子端之外:seed、overview、记录管理全不动。
|
||||||
|
|
||||||
## 测试清单(手工,项目无自动化测试框架)
|
### 6. 自动化测试框架(用户追加要求:没有就搭建)
|
||||||
|
|
||||||
1. 编辑页:JSON 文本域消失,题目卡片流可新增/编辑/删除/上下移/保存。
|
- 框架:**Vitest**(TS 原生、零配置成本),+ jsdom + @testing-library/react 用于组件测试(QuestionForm/QuestionList 题型联动)。
|
||||||
2. 四种题型表单字段联动正确;应用题的 rubric/answer 开关切换字段正确。
|
- 关键可测逻辑**沉淀为纯函数**进 lib,不做 DB/网络依赖:
|
||||||
3. 新建 answer 应用题(答案 0.5 与 1/2 都填):孩子端拍照 + 填 `1/2` → 判对满分;填 `2/3` → 判错 0 分,错题本含照片与判定。
|
- 新增 `src/lib/answer-match.ts`(归一化/等价,已设计于 §2)
|
||||||
4. 存量 rubric 题:孩子照旧拍照 AI 逐点评分,进错题本逐点判定。
|
- 现 `validateQuestionsJson`(parent/actions.ts 私有)→ 迁到新 `src/lib/question-validation.ts` 导出,`saveExamPaper` 引用之(行为不变)
|
||||||
5. 服务端校验:answer 模式缺 answers / rubric 模式缺 reference → 对应报错不保存。
|
- 测试覆盖:answer-match 全分支(数值/文本/单位/边界);question-validation 全题型 + judgeMode 新分支(accept/reject 用例);QuestionForm 题型联动渲染与非法输入提示。
|
||||||
6. 部署 jump.hn12301.net 后线上复验。
|
- 脚本:`"test": "vitest run"`;vitest.config.ts 配 `@` alias。
|
||||||
|
- CI:Gitea Actions 新增 `.gitea/workflows/test.yaml`,push 即跑 `npm ci && npm run test`(runner 为 node:24-slim,已可用)。
|
||||||
|
|
||||||
|
## 测试清单(手工 + 自动化)
|
||||||
|
|
||||||
|
- 自动化:上述 Vitest 用例全绿;`npm run test` 通过。
|
||||||
|
- 手工:编辑页 JSON 文本域消失,题目卡片流可新增/编辑/删除/上下移/保存。
|
||||||
|
- 手工:四种题型表单字段联动正确;应用题的 rubric/answer 开关切换字段正确。
|
||||||
|
- 手工:新建 answer 应用题(答案 0.5 与 1/2 都填):孩子端拍照 + 填 `1/2` → 判对满分;填 `2/3` → 判错 0 分,错题本含照片与判定。
|
||||||
|
- 手工:存量 rubric 题:孩子照旧拍照 AI 逐点评分,进错题本逐点判定。
|
||||||
|
- 手工:服务端校验:answer 模式缺 answers / rubric 模式缺 reference → 对应报错不保存。
|
||||||
|
- 部署 jump.hn12301.net 后线上复验。
|
||||||
Reference in New Issue
Block a user