关于 testing-cicd-init
为 JavaScript 和 TypeScript 项目初始化 Vitest 测试与 GitHub Actions CI/CD 的技能。它会识别项目类型并配置测试文件、脚本、覆盖率阈值和工作流,且须经明确批准才修改项目。
主要功能
- 01自动识别项目类型
- 02配置 Vitest 与测试初始化文件
- 03生成 GitHub Actions CI 工作流
- 04设置覆盖率阈值
- 05更新项目脚本并安装依赖
适用场景
- 01为缺少测试覆盖的项目添加测试
- 02初始化 GitHub Actions CI/CD
- 03为 Next.js 或 NestJS 配置 Vitest 覆盖率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ shipshitdev/ skills --skill testing-cicd-init安装后在 Claude Code 中输入/testing-cicd-init确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
plugin.jsontemplates/ci-nestjs.ymlci-nextjs.ymltest-setup-node.tstest-setup-react.tsvitest.config.nestjs.tsvitest.config.nextjs.ts详细介绍
测试与 CI/CD 初始化
授权范围
仅在用户请求和现有授权范围内操作;加载此技能不会授予新的权限。仅报告的请求必须保持为仅报告,遵守调用方对目标、主机、提供商和成本的限制;扩展范围前先征求同意,并将这些限制传达给委派对象。
契约
输入:
- 项目根目录(默认为当前工作目录)。
- 自动根据
package.json和配置文件检测项目类型;也可以显式指定(nextjs、nestjs、react、node)。
输出:
- 配置为适配已检测环境的
vitest.config.ts。 - 测试设置文件(Next.js/React 使用
src/test/setup.ts,NestJS 使用test/setup.ts)。 - 基于 Bun 的流水线及覆盖率强制检查配置文件
.github/workflows/ci.yml。 - 更新后的
package.json脚本(test、test:coverage、typecheck)。
创建/修改:
vitest.config.ts(创建)。- 测试设置文件(创建)。
.github/workflows/ci.yml(创建或更新)。package.json的 scripts 部分(更新)。
外部副作用:
- 运行
bun add -D安装 Vitest 和相关测试包。
需要确认:
- 仅当用户明确请求此配置,或批准的计划中包含此配置时,才应用设置。仅调用此技能不授予写入权限。
- 覆盖现有测试配置或添加授权设置之外的依赖前,必须先确认。
委派给:
husky-test-coverage技能,用于添加提交前覆盖率门禁(可选,不会自动调用)。playwright-e2e-init,用于添加 E2E 层(可选,不会自动调用)。
适用场景
以下情况应使用此技能:
- 为尚无测试覆盖率的项目添加测试
- 首次设置 GitHub Actions CI/CD
- 配置带覆盖率阈值的 Vitest
- 为新项目初始化测试基础设施
功能
- 检测项目类型(Next.js、NestJS、React、Node.js)
- 添加 Vitest 配置并设置适当选项
- 为相应环境创建测试设置文件
- 添加用于 CI/CD 的 GitHub Actions 工作流
- 配置 80% 的覆盖率阈值
- 向 package.json 添加测试脚本
- 安装所需依赖
项目类型检测
此技能通过扫描以下内容检测项目类型:
package.json依赖项(next、@nestjs/core、react 等)- 配置文件(next.config.*、nest-cli.json 等)
- 目录结构(app/、src/、pages/ 等)
快速开始
提示词示例:
Add testing and CI/CD to this project
也可以具体说明:
Set up Vitest with 80% coverage and GitHub Actions for this Next.js project
按项目类型配置
Next.js 项目
安装的依赖:
bun add -D vitest @vitest/coverage-v8 @vitejs/plugin-react @testing-library/react @testing-library/jest-dom jsdom
创建的文件:
vitest.config.ts- 使用 jsdom 环境的 Vitest 配置src/test/setup.ts- 包含 RTL 匹配器的测试设置.github/workflows/ci.yml- CI 流水线
测试模式: **/*.{test,spec}.{ts,tsx}
NestJS 项目
安装的依赖:
bun add -D vitest @vitest/coverage-v8 unplugin-swc @swc/core supertest @types/supertest
创建的文件:
vitest.config.ts- 使用 node 环境和unplugin-swc(装饰器元数据)的 Vitest 配置test/setup.ts- NestJS 测试设置.github/workflows/ci.yml- 包含 Postgres 服务和 Prisma 迁移的 CI
测试模式: src/**/*.spec.ts
React/Node.js 项目
根据检测到的框架遵循类似模式。
覆盖率配置
默认阈值(可配置):
- 行:80%
- 函数:80%
- 分支:75%
- 语句:80%
覆盖率强制检查在以下场景执行:
- 在提交前钩子中(通过 Husky)
- 在 CI/CD 流水线中(GitHub Actions)
GitHub Actions 功能
生成的 CI 工作流包含:
- 配置 Bun 并启用缓存
- 安装依赖
- 检查 Lint/格式(Biome)
- TypeScript 类型检查
- 执行测试并统计覆盖率
- 验证构建
- Postgres 服务和 Prisma 迁移(适用于 NestJS 项目)
模板
模板位于 templates/ 目录中:
| 模板 | 用途 |
|---|---|
vitest.config.nextjs.ts | Next.js 的 Vitest 配置 |
vitest.config.nestjs.ts | NestJS 的 Vitest 配置 |
ci-nextjs.yml | Next.js 的 GitHub Actions |
ci-nestjs.yml | NestJS 的 GitHub Actions |
test-setup-react.ts | 使用 RTL 的测试设置 |
test-setup-node.ts | Node.js 的测试设置 |
Monorepo 支持
对于 Monorepo(通过 package.json 中的 workspaces 检测):
- 在根目录创建
vitest.workspace.ts - 为每个包创建单独的
vitest.config.ts - 创建根级别的 GitHub Actions 工作流
- 使用
bun --filter '*' test进行编排
与其他技能集成
| 技能 | 集成方式 |
|---|---|
husky-test-coverage | 添加提交前的覆盖率强制检查 |
linter-formatter-init | 配合提升代码质量 |
playwright-e2e-init | 在单元测试后添加 E2E 测试 |
testing-expert | 提供测试模式指导 |
使用示例
为 Next.js 项目添加测试
User: Add testing to this project
Agent:
1. Detects Next.js from package.json
2. Installs vitest, @vitest/coverage-v8, @testing-library/react
3. Creates vitest.config.ts with jsdom environment
4. Creates src/test/setup.ts
5. Creates .github/workflows/ci.yml
6. Adds test scripts to package.json
为 NestJS API 添加测试
User: Set up tests for this NestJS API
Agent:
1. Detects NestJS from @nestjs/core dependency
2. Installs vitest, @vitest/coverage-v8, unplugin-swc, supertest
3. Creates vitest.config.ts with node environment
4. Creates test/setup.ts
5. Creates .github/workflows/ci.yml with a Postgres service
6. Adds test scripts to package.json
故障排除
测试找不到模块
确保 vitest.config.ts 中的路径别名与 tsconfig.json 一致:
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
覆盖率低于阈值
- 查看覆盖率报告:
bunx vitest run --coverage - 找出未覆盖的代码行
- 添加测试,或暂时调整阈值
CI 因类型错误而失败
推送前,确保在本地运行 bunx tsc --noEmit 并通过。
最佳实践
- 从实用工具和服务的单元测试开始
- 为 API 端点添加集成测试
- 谨慎使用 E2E 测试,仅用于关键流程
- 通过 Husky 在提交前运行测试
- 在 CI 中监控覆盖率趋势
评论
支持 Markdown