本文档由 g2rain-app-cli 的
# 测试策略
docs/development/testing.md 自动同步生成。# 当前基线
npm test
npm test 先编译 CLI,再使用 Node test runner 在系统临时目录创建最小模板并执行真实 CLI 进程,验证生成项目身份和模板来源记录。当前仍没有完整的参数、路径、失败恢复或发布测试;每次 CLI 行为变化还应按影响范围执行本地模板 smoke test。
# Smoke Test
- 构建 CLI。
- 创建全新临时父目录。
- 设置
G2RAIN_TEMPLATE_PATH指向已知本地模板。 - 非交互生成唯一项目名。
- 检查目标目录和排除项,确认
.git与.idea未复制。 - 检查 package name、仓库地址、文档身份、模板来源、Context Path 和残留占位符。
- 在生成项目执行依赖安装和
npm run build(网络/时间允许时)。 - 重复同名生成,确认拒绝覆盖。
# 按变化验证
| 变化 | 覆盖场景 |
|---|---|
| 参数解析 | 两个 flag 拼写、位置参数、缺参、未知参数、取消、非 TTY |
| 项目名/路径 | 正常名、scoped/非法名、绝对路径、..、空白、已有目录 |
| Context Path | 默认推导、首尾 /、空值、非法字符、多段路径 |
| 模板定位 | 环境覆盖、本地相邻目录、Git clone、网络失败、不完整目录 |
| 复制 | 排除项、隐藏文件、二进制、权限和符号链接策略 |
| 替换 | 所有清单文件、缺失文件、重复 token、特殊字符、残留 token |
| 发布 | shebang、两个 bin、npm pack 内容、干净安装后的执行 |
# 建议自动化
- 使用 Node test runner 或 Vitest 测试参数、规范化和路径校验纯函数。
- 使用
mkdtemp建立隔离集成测试,注入最小模板 fixture。 - 把 clone 适配成可替换接口,测试失败而不访问网络。
- 增加模板 manifest 契约测试和生成项目最小 build。
- 增加
prepublishOnly执行 build/test,并在 CI 检查npm pack --dry-run。