# PROGRESS — E-04 · 三步引导 + 考试倒计时 + 每日目标 - 状态:done > 日期 2026-09-13 · 范围:只改 `english-drill` 目录(仅新增 tests/e2e 用例 + 注册) ## 现状 vs 差距(接手时) - 已有:`UserProfile(exam_date/daily_word_target/onboarding_completed/goal_book_id)`、 `GoalsView/OnboardingView`(校验:日期 YYYY-MM-DD、词量 1-200、`days_to_exam=max(0)`)、 `OnboardingPage` 三步页、首页 goal-summary 倒计时条。 - 缺口:E2E 零覆盖。后端/前端实现完整,本轮只补回归。 ## 改动(全部在 `C:/Users/12914/Desktop/english-drill/` 内) 1. `tests/e2e/cases_onboarding.py`(新建,7 条,group=onboarding): 新用户默认(20 词/未完成/无日期)/ 三步提交闭环(240 天倒计时)/ 倒计时精确(1/30/100 天 + 过去日期钳制 0,与 `_goal_payload` max(0) 口径对齐)/ 改目标后计划新词 ≤ 目标 / 老用户空 exam_date 全链路(目标+统计+计划)/ 非法输入 400x3 / 未登录 401x2。 2. `tests/e2e/run_e2e.py`:注册 `cases_onboarding`。 ## 口径校准(诚实记录) - 过去日期倒计时:初版用例断言 `<= 0`,跑前核对后端为 `max(0, days)`,已改断言为 `== 0`。 - “修改目标后计划随之变化”:计划接口返回结构为 `cards_new/cards` 混合,用例取三键和并断言 `≤ 目标`。 ## 验证 ```bash python "C:/.../english-drill/tests/e2e/run_e2e.py" -k onboarding # 合计 7 用例 | 通过 7 | 断言失败 0 | 异常 0 python "C:/.../english-drill/tests/e2e/run_e2e.py" # 合计 124 用例 | 通过 124 | 断言失败 0 | 异常 0(无回归) ``` ## 状态 done。遗留:无(复杂规划算法任务卡明确不做)。