mcpField
T
testing-cicd-init

testing-cicd-init

github.com/shipshitdev测试与质量38175 次安装2 天前更新
代码仓库

关于 testing-cicd-init

为 JavaScript 和 TypeScript 项目初始化 Vitest 测试与 GitHub Actions CI/CD 的技能。它会识别项目类型并配置测试文件、脚本、覆盖率阈值和工作流,且须经明确批准才修改项目。

主要功能

  1. 01自动识别项目类型
  2. 02配置 Vitest 与测试初始化文件
  3. 03生成 GitHub Actions CI 工作流
  4. 04设置覆盖率阈值
  5. 05更新项目脚本并安装依赖

适用场景

  1. 01为缺少测试覆盖的项目添加测试
  2. 02初始化 GitHub Actions CI/CD
  3. 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.json
templates/
ci-nestjs.yml
ci-nextjs.yml
test-setup-node.ts
test-setup-react.ts
vitest.config.nestjs.ts
vitest.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
  • 为新项目初始化测试基础设施

功能

  1. 检测项目类型(Next.js、NestJS、React、Node.js)
  2. 添加 Vitest 配置并设置适当选项
  3. 为相应环境创建测试设置文件
  4. 添加用于 CI/CD 的 GitHub Actions 工作流
  5. 配置 80% 的覆盖率阈值
  6. 向 package.json 添加测试脚本
  7. 安装所需依赖

项目类型检测

此技能通过扫描以下内容检测项目类型:

  • 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%

覆盖率强制检查在以下场景执行:

  1. 在提交前钩子中(通过 Husky)
  2. 在 CI/CD 流水线中(GitHub Actions)

GitHub Actions 功能

生成的 CI 工作流包含:

  • 配置 Bun 并启用缓存
  • 安装依赖
  • 检查 Lint/格式(Biome)
  • TypeScript 类型检查
  • 执行测试并统计覆盖率
  • 验证构建
  • Postgres 服务和 Prisma 迁移(适用于 NestJS 项目)

模板

模板位于 templates/ 目录中:

模板用途
vitest.config.nextjs.tsNext.js 的 Vitest 配置
vitest.config.nestjs.tsNestJS 的 Vitest 配置
ci-nextjs.ymlNext.js 的 GitHub Actions
ci-nestjs.ymlNestJS 的 GitHub Actions
test-setup-react.ts使用 RTL 的测试设置
test-setup-node.tsNode.js 的测试设置

Monorepo 支持

对于 Monorepo(通过 package.json 中的 workspaces 检测):

  1. 在根目录创建 vitest.workspace.ts
  2. 为每个包创建单独的 vitest.config.ts
  3. 创建根级别的 GitHub Actions 工作流
  4. 使用 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"),
  },
},
覆盖率低于阈值
  1. 查看覆盖率报告:bunx vitest run --coverage
  2. 找出未覆盖的代码行
  3. 添加测试,或暂时调整阈值
CI 因类型错误而失败

推送前,确保在本地运行 bunx tsc --noEmit 并通过。

最佳实践

  1. 从实用工具和服务的单元测试开始
  2. 为 API 端点添加集成测试
  3. 谨慎使用 E2E 测试,仅用于关键流程
  4. 通过 Husky 在提交前运行测试
  5. 在 CI 中监控覆盖率趋势

评论

支持 Markdown