Skip to content

Commit 91c5bea

Browse files
docs: 添加后续测试覆盖计划 (Phase 1-4)
4 个阶段共计 ~213 tests / 20 files,目标从 647 提升至 ~860 tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 717cc55 commit 91c5bea

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

docs/testing-spec.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,62 @@ bun test --watch
371371

372372
**关键约束**`mock.module()` 必须在每个测试文件中内联调用,不能从共享 helper 导入(Bun 在 mock 生效前就解析了 helper 的导入)。
373373

374-
## 12. 参考
374+
## 12. 后续测试覆盖计划
375+
376+
> 目标:再增加 ~200 tests,从 647 → ~860 tests / 52 files
377+
378+
### Phase 1:纯函数(零依赖,~98 tests,8 files)
379+
380+
| 测试文件 | 源文件 | 关键函数 | 预估 |
381+
|----------|--------|----------|------|
382+
| `errors.test.ts` | `src/utils/errors.ts` | `isAbortError`, `toError`, `errorMessage`, `getErrnoCode`, `isENOENT`, `isFsInaccessible`, `classifyAxiosError` + Error classes | 20 |
383+
| `shellRuleMatching.test.ts` | `src/utils/permissions/shellRuleMatching.ts` | `permissionRuleExtractPrefix`, `hasWildcards`, `matchWildcardPattern`, `parsePermissionRule`, `suggestionForExactCommand` | 20 |
384+
| `argumentSubstitution.test.ts` | `src/utils/argumentSubstitution.ts` | `parseArguments`, `parseArgumentNames`, `generateProgressiveArgumentHint`, `substituteArguments` | 15 |
385+
| `CircularBuffer.test.ts` | `src/utils/CircularBuffer.ts` | `CircularBuffer` class 全部方法 | 12 |
386+
| `sanitization.test.ts` | `src/utils/sanitization.ts` | `partiallySanitizeUnicode`, `recursivelySanitizeUnicode` | 10 |
387+
| `slashCommandParsing.test.ts` | `src/utils/slashCommandParsing.ts` | `parseSlashCommand` | 8 |
388+
| `contentArray.test.ts` | `src/utils/contentArray.ts` | `insertBlockAfterToolResults` | 8 |
389+
| `objectGroupBy.test.ts` | `src/utils/objectGroupBy.ts` | `objectGroupBy` | 5 |
390+
391+
### Phase 2:轻 Mock(mock log.ts / env,~63 tests,6 files)
392+
393+
| 测试文件 | 源文件 | Mock 策略 | 预估 |
394+
|----------|--------|-----------|------|
395+
| `envUtils.test.ts` | `src/utils/envUtils.ts` | 临时修改 `process.env` | 15 |
396+
| `sleep.test.ts` | `src/utils/sleep.ts` + `sequential.ts` | AbortController | 14 |
397+
| `memoize.test.ts` | `src/utils/memoize.ts` | mock `log.ts` + `slowOperations.ts` | 12 |
398+
| `groupToolUses.test.ts` | `src/utils/groupToolUses.ts` | 构造 mock message/tool 对象 | 12 |
399+
| `dangerousPatterns.test.ts` | `src/utils/permissions/dangerousPatterns.ts` | 无(常量导出) | 5 |
400+
| `outputLimits.test.ts` | `src/utils/shell/outputLimits.ts` | 临时修改 `process.env` | 5 |
401+
402+
### Phase 3:补全现有计划缺口(~20 tests,3 files)
403+
404+
| 测试文件 | 源文件 | Mock 策略 | 预估 |
405+
|----------|--------|-----------|------|
406+
| `context.test.ts` | `src/context.ts` | mock `execFileNoThrow`, `log.ts` | 10 |
407+
| `zodToJsonSchema.test.ts` | `src/utils/zodToJsonSchema.ts` | 无(仅依赖 zod) | 5 |
408+
| `PermissionMode.test.ts` | `src/utils/permissions/PermissionMode.ts` | 视导出情况 | 5 |
409+
410+
### Phase 4:工具模块扩展(~30 tests,3 files)
411+
412+
| 测试文件 | 源文件 | 预估 |
413+
|----------|--------|------|
414+
| `bashPermissions.test.ts` | `src/tools/BashTool/` | 10 |
415+
| `GlobTool.test.ts` | `src/tools/GlobTool/` | 10 |
416+
| `mcpStringUtils.test.ts` | `src/services/mcp/mcpStringUtils.ts` | 10 |
417+
418+
### 不纳入计划的模块
419+
420+
| 模块 | 原因 |
421+
|------|------|
422+
| `query.ts` / `QueryEngine.ts` | 核心循环,需集成测试环境 |
423+
| `services/api/claude.ts` | 需 mock SDK 流式响应 |
424+
| `spawnMultiAgent.ts` | 50+ 依赖,mock 不可行 |
425+
| `modelCost.ts` | 依赖 bootstrap/state + analytics |
426+
| `mcp/dateTimeParser.ts` | 调用 Haiku API |
427+
| `screens/` / `components/` | UI 组件,需 Ink 渲染测试 |
428+
429+
## 13. 参考
375430

376431
- [Bun Test 文档](https://bun.sh/docs/cli/test)
377432
- 现有测试示例:`src/utils/__tests__/set.test.ts`, `src/utils/__tests__/array.test.ts`

0 commit comments

Comments
 (0)