[测试工程] 缺少现代化单元测试框架:引入 Vitest 规范化测试套件、覆盖率统计与持续集成 #14

Closed
opened 2026-09-14 07:01:35 +00:00 by troytt · 1 comment
Owner

Parent Issue: #7 ([Code Review] 整体代码质量、架构缺陷与技术债务全景审查报告)

模块位置

package.json, scripts/verify-*.ts

问题背景与现象

  • 目前所有测试验证(verify-combat.ts、verify-items.ts、verify-m4.ts、verify-m5.ts、verify-net.ts、verify-collision-orientation.ts 等)均编写为独立的命令行脚本。
  • 每个脚本自行实现 checks 数组统计、console.log 打印以及 process.exit(1) 控制。

造成的影响

  1. 缺少测试隔离、测试筛选(Filter/Grep)、Watch 模式与代码覆盖率(Coverage)统计;
  2. 异步超时与未捕获异常处理分散在各个脚本中,难以统一集成进 GitHub Actions / Gitea Actions CI 流水线。

解决建议

  1. 在 devDependencies 中引入 vitest;
  2. 配置 vitest.config.ts;
  3. 将现有 scripts/verify-*.ts 的断言逐步迁移包装为标准 Vitest 测试套件;
  4. 在 package.json 中增加 npm test 与 npm run test:coverage。
> **Parent Issue**: #7 ([Code Review] 整体代码质量、架构缺陷与技术债务全景审查报告) ## 模块位置 `package.json`, `scripts/verify-*.ts` ## 问题背景与现象 - 目前所有测试验证(`verify-combat.ts`、`verify-items.ts`、`verify-m4.ts`、`verify-m5.ts`、`verify-net.ts`、`verify-collision-orientation.ts` 等)均编写为独立的命令行脚本。 - 每个脚本自行实现 `checks` 数组统计、`console.log` 打印以及 `process.exit(1)` 控制。 ## 造成的影响 1. 缺少测试隔离、测试筛选(Filter/Grep)、Watch 模式与代码覆盖率(Coverage)统计; 2. 异步超时与未捕获异常处理分散在各个脚本中,难以统一集成进 GitHub Actions / Gitea Actions CI 流水线。 ## 解决建议 1. 在 `devDependencies` 中引入 `vitest`; 2. 配置 `vitest.config.ts`; 3. 将现有 `scripts/verify-*.ts` 的断言逐步迁移包装为标准 Vitest 测试套件; 4. 在 `package.json` 中增加 `npm test` 与 `npm run test:coverage`。
Author
Owner

已修复 — test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (1a81693)

  • 新增 vitest.config.ts、npm test / test:watch / test:coverage。
  • 把原先 scripts/verify-*.ts 里的断言按语义迁移为真正的 describe/test/expect 用例,而不是占位符;原脚本保留可用。
  • 新增 .gitea/workflows/ci.yml(Node 20/22 矩阵,npm ci → typecheck → test)。
  • tests/ 中不再有 process.exit(此前有 5 个文件用它,会让失败被吞掉)。

验证(冷装): tsc --noEmit 0 错误;396 passed / 27 skipped / 0 failed;--sequence.shuffle 下同样稳定,说明用例之间无顺序耦合。

说明:4 个套件(dcc、tiles、object-lookup、widths)是 skipIf 跳过的 —— 它们需要真实的 samples/d2 MPQ 资源,而该资源不在本仓库中。这是有条件跳过,一旦放入资源就会自动运行,不是无条件 skip。

### 已修复 — `test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线` (1a81693) - 新增 `vitest.config.ts`、`npm test` / `test:watch` / `test:coverage`。 - 把原先 `scripts/verify-*.ts` 里的断言**按语义迁移**为真正的 `describe`/`test`/`expect` 用例,而不是占位符;原脚本保留可用。 - 新增 `.gitea/workflows/ci.yml`(Node 20/22 矩阵,`npm ci` → typecheck → test)。 - `tests/` 中不再有 `process.exit`(此前有 5 个文件用它,会让失败被吞掉)。 **验证(冷装):** `tsc --noEmit` 0 错误;**396 passed / 27 skipped / 0 failed**;`--sequence.shuffle` 下同样稳定,说明用例之间无顺序耦合。 > 说明:4 个套件(`dcc`、`tiles`、`object-lookup`、`widths`)是 `skipIf` 跳过的 —— 它们需要真实的 `samples/d2` MPQ 资源,而该资源不在本仓库中。这是**有条件跳过**,一旦放入资源就会自动运行,不是无条件 skip。
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Reference: troytt/diablo2-web#14
No description provided.