Help us improve
Share bugs, ideas, or general feedback.
From open-skills
Detects tech stack, sets up test frameworks, and generates unit tests for logic code (services, utils, models) in JS/TS, Python, Go, Java, Rust, or C# projects. Optionally handles E2E tests.
npx claudepluginhub fudesign2008/open-skills --plugin open-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/open-skills:ensure-testsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
确保当前工程的测试套件就位:检测技术栈与框架,必要时搭建框架,生成单元测试(必须,仅针对逻辑代码),并可选生成/运行 E2E 测试。
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
确保当前工程的测试套件就位:检测技术栈与框架,必要时搭建框架,生成单元测试(必须,仅针对逻辑代码),并可选生成/运行 E2E 测试。
opsx-solve-workflow(阶段 5 末尾)等工作流调用时,以本次变更涉及的逻辑文件为重点作用域,缩小测试生成范围扫描项目根目录,判断主要编程语言与框架:
| 文件 | 判断 |
|---|---|
package.json | JavaScript / TypeScript |
go.mod | Go |
requirements.txt / pyproject.toml / setup.py | Python |
pom.xml / build.gradle | Java |
Cargo.toml | Rust |
*.csproj / *.sln | C# / .NET |
若检测到 package.json,进一步判断前端框架:
"vite" → 优先使用 Vitest"react" / "vue" / "angular" → 前端框架(但测试仍只覆盖逻辑层)"next" / "nuxt" → 服务端渲染框架"express" / "fastify" / "koa" 等 → 纯 Node.js 后端根据 tech stack 检测现有测试框架:
JavaScript / TypeScript:
jest.config.js / jest.config.ts 存在,或 package.json devDependencies 含 jest → Jest ✅vitest.config.js / vitest.config.ts 存在,或 devDependencies 含 vitest → Vitest ✅package.json scripts.test 已配置 → 对应框架 ✅Python:
pytest.ini / setup.cfg [tool:pytest] / pyproject.toml [tool.pytest.ini_options] 存在 → Pytest ✅devDependencies 或 requirements*.txt 含 pytest → Pytest ✅Go:
go test,检测到 go.mod 即为 ✅,无需额外框架Java:
pom.xml 含 junit 依赖,或 build.gradle 含 testImplementation 'junit' → JUnit ✅Rust:
cargo test,无需额外检测 ✅按 tech stack 选型并安装:
| Tech Stack | 优先选型 | 安装命令 |
|---|---|---|
| TypeScript + Vite 项目 | Vitest | npm install -D vitest @vitest/ui |
| TypeScript / JavaScript 通用 | Jest + ts-jest | npm install -D jest ts-jest @types/jest |
| Python | Pytest | pip install pytest pytest-cov |
搭建步骤:
vitest.config.ts / jest.config.ts / pytest.ini)package.json scripts 中添加 "test" 入口(若不存在):
"test": "vitest run""test": "jest"工具限制:✅ 允许 Bash 执行安装命令;✅ 允许 Write 创建配置文件
以下目录和文件类型在作用域内:
services/、utils/、helpers/、lib/、core/、models/、store/、api/hooks/、composables/)*.util.ts、*.helper.ts、*.service.ts)以下目录和文件类型不在作用域内:
components/、views/、pages/、layouts/、screens/.tsx、.vue、.svelte、.jsx 文件*.stories.tsx、*.stories.ts(Storybook)__mocks__/、fixtures/(测试辅助文件)*.css、*.scss、*.less)| 框架 | 命名规范 | 推荐位置 |
|---|---|---|
| Jest / Vitest | <name>.spec.ts 或 <name>.test.ts | 与源文件同目录,或 __tests__/ |
| Pytest | test_<name>.py 或 <name>_test.py | tests/ 目录或与源文件同目录 |
| Go | <name>_test.go | 与源文件同目录(同包) |
| JUnit | <Name>Test.java | src/test/java/ 对应包路径 |
# JavaScript / TypeScript(Jest)
npm test -- --passWithNoTests
# JavaScript / TypeScript(Vitest)
npx vitest run
# Python
pytest --tb=short
# Go
go test ./...
# Rust
cargo test
# Java(Maven)
mvn test
# Java(Gradle)
./gradlew test
单元测试运行失败(非零退出码)时:
| 配置文件 | 框架 |
|---|---|
playwright.config.ts / playwright.config.js | Playwright |
cypress.config.ts / cypress.config.js | Cypress |
nightwatch.conf.js / nightwatch.conf.ts | Nightwatch |
wdio.conf.js / wdio.conf.ts | WebdriverIO |
# Playwright
npx playwright test
# Cypress(无头模式)
npx cypress run
E2E 失败时:输出失败截图路径(若有)和失败原因,不阻断主流程(E2E 为可选项)。
【ensure-tests 执行结果】
- Tech Stack:...(如 TypeScript + Vite)
- 测试框架:已存在 <框架名> / 新安装 <框架名>(含配置文件路径)
- 单元测试:
- 作用域逻辑文件:X 个
- 新增测试文件:X 个,追加用例:X 个
- 运行结果:✅ X 通过,0 失败 / ❌ X 失败(列出失败用例)
- E2E 测试:
- 检测结果:检测到 <框架名> / 未检测到,跳过
- 运行结果:✅ X 通过 / ❌ X 失败(附截图路径)/ 跳过
| 错误 | 后果 | 修正 |
|---|---|---|
| 将 UI 组件文件纳入单元测试作用域 | 生成无意义的渲染测试,维护成本高 | 严格遵循排除规则,仅覆盖逻辑层 |
| 框架已存在却重复安装 | 依赖版本冲突 | 阶段 2 检测到框架后跳过阶段 3 |
| 覆盖已有测试文件 | 丢失已有测试逻辑 | 始终采用追加模式,不覆盖 |
| 单元测试失败超 2 轮仍继续执行 | 带着失败测试交付 | 超 2 轮必须停止,等待用户介入 |
| E2E 失败时阻断主流程 | E2E 为可选项,不应成为硬门控 | E2E 失败只输出警告,不阻断 |
| 被 workflow 调用时忽略传入的变更文件列表 | 测试覆盖范围过宽或遗漏关键变更 | 优先以变更文件为作用域,再扩展全局 |