# Claude Code batch 教程：把六组 Jest 测试迁到 Vitest 并合并验收

## 身份和范围

本站原创 fixture 与人工参考；实际运行：Jest/Vitest 六套测试原始执行输出。目标代理模型、账号会话、付费 API、第三方 PR、推送和发布均未执行。公开包不含 .env；需要时仅在自己的临时练习目录从文本模板创建。

## 本地命令

```sh
npm ci
npm run test:before
npm run test:after
```

## 七步原生操作

### 1. 固定六套原测试与两个框架版本

打开 before 的六个目录，package.json 锁定 Jest 30.2.0 与 Vitest 4.0.18。先 npm ci，再 npm run test:before，保留六套基线；本题锁定的是练习版本，不把它称为当前最新版。

### 2. 从原生 batch 生成六单元计划

在独立 Git 练习仓库中输入 /batch，交代每个 after/NN-* 目录一名负责人，包配置只由主会话维护。先审计划中的六单元文件责任范围；若当前 /batch 不能在发布前停下，只保留计划并改为本地执行。

### 3. 检查 worktree 与外部动作边界

确认六个隔离工作单元基于同一提交，不能多个代理改一个配置。提示词明确不 push、不建 PR、不改原测试真值；本教材没有执行 /batch 或创建远端任务，也不把参考实现当代理变更。

### 4. 逐组迁移显式导入和断言

将 @jest/globals 换成 vitest 的 test/expect/vi，保持 async test 的 await。不要全文替换 jest 字符串后就结束：mock 函数、调用断言和异常消息必须保留原验收意图。

### 5. 单独处理 mockReset 的语义差异

第五组源测试中 Jest mockReset 后返回 undefined；本题 Vitest 参考恢复构造时实现，因此返回 7。把这项有意语义差异写进 migration-map.json，不能让模型偷偷改断言掩盖行为变化。

### 6. 运行真正的新框架六套测试

npm run test:after 启动真实 Vitest，不用自制 assert 模拟测试框架。先在各隔离目录检查，再集成运行六组；包内 execution.txt 保存本站在临时目录实际跑过的 Jest 和 Vitest 真实输出，本机路径已替换为 <exercise>。

### 7. 审 diff 再合并本地结果

比较 before/after 的断言映射、异步等待和 mock 行为；检查没有删除失败断言。最终交付六组通过记录及唯一明确的 reset 差异，远端 PR 与发布不属于本题验收。

## 验收产物

六单元迁移计划和独立 worktree 变更；Jest→Vitest 断言及 mock 语义对照表、迁移后本地测试记录

## 门槛

- 原生 /batch 会划分 5–30 个独立单元；需 Git worktree 或对应 WorktreeCreate 支持。
- 当前 Vitest 文档要求 Node >=22.12、Vite >=6.4；按练习锁文件固定版本。
- 原生流程可能含外部发布动作；教程须明确本地边界，若当前版本无法尊重不推送要求则停在计划阶段，不自动建第三方 PR。

## 官方来源

- https://code.claude.com/docs/en/skills
- https://code.claude.com/docs/en/commands
- https://vitest.dev/guide/migration/jest
- https://vitest.dev/guide/

静态配图冻结于本次输入。修改输入需重新运行并自行重渲染；不把旧截图当新结果。

日志路径说明：execution.txt为实际执行输出的公开副本，仅将本机绝对目录替换为 <exercise>；测试结果、版本和计数未改。
