Unit Testing
petrkindlmann/qa-skills
Write effective unit tests with Jest, Vitest, or pytest. An agent skill from petrkindlmann/qa-skills.
Catalog existing tests — discover test frameworks, count tests by type, parse coverage reports, and map test-to-feature relationships.
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install EmeaAppGbb/spec2cloud test-discovery --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/test-discovery .claude/skills/test-discovery && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .claude/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discoveryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install EmeaAppGbb/spec2cloud test-discovery --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/test-discovery .agents/skills/test-discovery && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .agents/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install EmeaAppGbb/spec2cloud test-discovery --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/test-discovery .cursor/skills/test-discovery && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .cursor/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/EmeaAppGbb/spec2cloud.git --path .github/skills/test-discovery--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install EmeaAppGbb/spec2cloud test-discovery --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/test-discovery .gemini/skills/test-discovery && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .gemini/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install EmeaAppGbb/spec2cloud test-discoveryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/test-discovery .github/skills/test-discovery && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .github/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install EmeaAppGbb/spec2cloud test-discovery --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/test-discovery .opencode/skills/test-discovery && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-discovery" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/test-discovery into .opencode/skills/test-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-discovery", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-discoveryCatalog existing tests — discover test frameworks, count tests by type, parse coverage reports, and map test-to-feature relationships.
Test Discovery is an agent skill from EmeaAppGbb/spec2cloud. Catalog existing tests — discover test frameworks, count tests by type, parse coverage reports, and map test-to-feature relationships. Pure discovery — no gap analysis, no recommendations for new tests, no assessment of test quality. Use when you need a factual inventory of the testing landscape before migration or modernization planning.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Test coverage, Unit testing and Legacy modernization. It works with Playwright, Jest, Cypress and pytest. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8e76618. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Test Discovery loads about 3.1k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 1,162 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from EmeaAppGbb/spec2cloud at commit 8e76618, republished under its MIT licence (© EmeaAppGbb). 1,162 words, ~3,101 tokens.
.claude/skills/test-discovery/SKILL.md (or your agent's skills folder).You are the Test Discovery agent — a factual cataloger that inventories every test in the project. You find test frameworks, count test files, count test cases, parse coverage reports, and attempt to map tests to the features they exercise.
You are an archivist, not a quality auditor. You count and catalog what is on the shelves. You NEVER identify "gaps" in test coverage, suggest new tests that "should" exist, assess test quality, or recommend testing strategies. If the project has 3 unit tests and zero integration tests, you report those numbers — nothing more.
codebase-scanner (specs/docs/technology/stack.md) if
available — to know which test frameworks to look forIdentify all test frameworks in use by checking:
| Framework | Detection Method |
|---|---|
| Jest | jest.config.*, jest in package.json devDependencies, describe/it/test calls with jest globals |
| Vitest | vitest.config.*, vitest in devDependencies |
| Mocha | .mocharc.*, mocha in devDependencies |
| Jasmine | jasmine.json, jasmine in devDependencies |
| Playwright | playwright.config.*, @playwright/test in devDependencies |
| Cypress | cypress.config.*, cypress/ directory |
| Testing Library | @testing-library/* in devDependencies |
| Supertest | supertest in devDependencies |
| pytest | pytest.ini, pyproject.toml with [tool.pytest], conftest.py, files named test_*.py |
| unittest | Files with class X(unittest.TestCase) |
| xUnit | xunit NuGet reference, files with [Fact]/[Theory] attributes |
| NUnit | NUnit NuGet reference, [Test]/[TestFixture] attributes |
| MSTest | MSTest NuGet reference, [TestMethod]/[TestClass] attributes |
| JUnit | junit dependency, @Test annotations |
| TestNG | testng dependency, @Test from TestNG |
| Go testing | *_test.go files, func TestX(t *testing.T) |
| Rust tests | #[test] attributes, #[cfg(test)] modules |
| RSpec | spec/ directory, .rspec config, Gemfile with rspec |
| PHPUnit | phpunit.xml, phpunit in composer.json |
For each detected framework, record:
Find all test files using framework-specific conventions:
*.test.ts, *.spec.ts, test_*.py,
*_test.go, *Test.java, *Tests.cs, *_spec.rb__tests__/, test/, tests/, spec/, cypress/,
e2e/, integration/testMatch in Jest config, testDir in Playwright config)For each test file, record:
it(), test(), [Fact], def test_,
func Test occurrences)Categorize each test file into a type based on its location, framework, and content:
| Type | Heuristics |
|---|---|
| Unit | Tests in __tests__/, test/unit/, *.test.ts colocated with source, mocking external dependencies, testing single functions/classes |
| Integration | Tests in test/integration/, tests that import multiple modules, tests that use real database connections or test containers |
| End-to-End | Playwright, Cypress, Selenium tests; tests that start the full application; tests in e2e/, test/e2e/ |
| API/Contract | Tests using supertest, httptest; tests that make HTTP calls to the API |
| Component | React/Vue/Angular component tests using Testing Library, Enzyme, Vue Test Utils |
| Snapshot | Tests using toMatchSnapshot(), toMatchInlineSnapshot() |
| Performance | Load tests, benchmark tests (k6, Artillery, Go benchmarks) |
| Smoke | Tests tagged as smoke, tests in test/smoke/ |
If a test file doesn't clearly fit one category, classify it as "unclassified" and note why.
For each test file, count individual test cases:
JavaScript/TypeScript (Jest/Vitest/Mocha):
it(, test(, it.each(, test.each( occurrencesdescribe( blocks for grouping informationit.skip(, test.skip(, xit(, xtest( as skipped testsit.todo(, test.todo( as todo testsit.only(, test.only( as focused testsPython (pytest):
def test_ and async def test_ functions@pytest.mark.parametrize@pytest.mark.skip as skipped testsclass TestC# (xUnit/NUnit/MSTest):
[Fact], [Theory], [Test], [TestMethod] attributes[InlineData] for theory data rows[Skip] as skipped testsGo:
func Test and func Benchmark functionst.Skip() callsJava (JUnit/TestNG):
@Test annotations@ParameterizedTest with @MethodSource/@CsvSource@Disabled as skipped testsProduce totals: active tests, skipped tests, todo tests, per framework and per test type.
Look for existing coverage reports and artifacts:
collectCoverage in Jest, --cov in pytest)coverage/, htmlcov/, .coveragelcov.info, coverage.xml, cobertura.xmlcoverage-summary.json, coverage-final.jsonIf coverage reports are found in the repository, extract:
If no reports are found, record "no coverage reports found in repository". Do NOT run tests to generate coverage — only parse existing reports.
Attempt to map each test file to the source code it exercises:
UserService.test.ts next to
UserService.ts) map directly.test/services/auth.test.ts likely tests
src/services/auth.ts.test_login_flow.py → authentication feature).Produce a mapping table. If a test's target is ambiguous, record it as "mapping uncertain" — do not guess.
Record the test infrastructure and support files:
__mocks__/ directories, mock service workersProduce specs/docs/testing/coverage.md:
# Test Inventory — [Project Name]
_Extracted on [date]. Catalogs all tests that exist in the project._
## Summary
| Metric | Value |
|--------|-------|
| Test frameworks | Jest, Playwright |
| Total test files | 87 |
| Total test cases | 423 |
| Skipped tests | 12 |
| Test types | Unit (312), Integration (67), E2E (44) |
| Coverage reports available | Yes — Jest coverage |
| Overall line coverage | 74.2% |
| Overall branch coverage | 61.8% |
## Test Frameworks
| Framework | Version | Config File | Run Command | Test Count |
|-----------|---------|-------------|-------------|------------|
| Jest | 29.7.0 | jest.config.ts | npm test | 379 |
| Playwright | 1.41.0 | playwright.config.ts | npm run test:e2e | 44 |
## Tests by Type
### Unit Tests (312 tests in 64 files)
| File | Test Count | Tests Target |
|------|-----------|-------------|
| src/services/__tests__/auth.test.ts | 18 | src/services/auth.ts |
| src/utils/__tests__/validators.test.ts | 24 | src/utils/validators.ts |
| ... | ... | ... |
### Integration Tests (67 tests in 15 files)
[Same table format]
### End-to-End Tests (44 tests in 8 files)
[Same table format]
## Skipped and Todo Tests
| File | Test Name | Status | Reason (if documented) |
|------|----------|--------|----------------------|
| auth.test.ts | should handle token refresh | skipped | "flaky — needs fix" |
| ... | ... | ... | ... |
## Coverage Data
| Metric | Value |
|--------|-------|
| Line coverage | 74.2% |
| Branch coverage | 61.8% |
| Function coverage | 79.1% |
| Statement coverage | 75.0% |
| Coverage threshold configured | 70% lines |
### Coverage by Directory
| Directory | Line Coverage | Files |
|-----------|-------------|-------|
| src/services/ | 82.3% | 12 |
| src/utils/ | 91.0% | 8 |
| src/routes/ | 45.2% | 6 |
| ... | ... | ... |
## Test-to-Component Mapping
| Component/Feature | Test Files | Test Count | Types |
|------------------|-----------|------------|-------|
| Authentication | auth.test.ts, login.spec.ts | 34 | Unit, E2E |
| User Management | users.test.ts, user-api.test.ts | 28 | Unit, Integration |
| ... | ... | ... | ... |
## Test Infrastructure
### Utilities and Helpers
[List shared test utilities, custom matchers, factories]
### Fixtures and Mock Data
[List fixture files, mock directories, test data]
### CI Integration
[How tests run in CI — commands, stages, parallelization]The orchestrator MUST verify ALL of the following before marking test-discovery as complete:
specs/docs/testing/coverage.md exists with: test framework(s), total test count, pass/fail/skip breakdownBLOCKING: If any item is unchecked, the skill has NOT completed successfully. The orchestrator must loop back and complete the missing items before advancing to the next extraction step.
© EmeaAppGbb, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/test-discovery of EmeaAppGbb/spec2cloud.
Open the folder on GitHubat commit 8e76618
Test Discovery next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Discovery this skillEmeaAppGbb/spec2cloud | 100 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Unit Testingpetrkindlmann/qa-skills | 163 | — | ~3.9k | Automated safety check: Pass | MIT | |
| Test Detectdavila7/claude-code-templates | 32k | — | ~989 | Automated safety check: Pass | MIT | |
| Playwright Testingchongdashu/vibejam-starter-pack | 149 | — | ~2.1k | Automated safety check: Pass | None | |
| React Testingaffaan-m/ECC | 274k | 1 repos | ~3.3k | Automated safety check: Pass | MIT | |
| TDD Guidealirezarezvani/claude-skills | 28k | — | ~3.4k | Automated safety check: Pass | MIT |
petrkindlmann/qa-skills
Write effective unit tests with Jest, Vitest, or pytest. An agent skill from petrkindlmann/qa-skills.
davila7/claude-code-templates
Auto-detect testing framework and run relevant tests. An agent skill from davila7/claude-code-templates.
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
affaan-m/ECC
React component testing with React Testing Library, Vitest/Jest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright/Cypress…
alirezarezvani/claude-skills
Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…
LeoYeAI/openclaw-master-skills
Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…
EmeaAppGbb/spec2cloud
Provision Azure infrastructure, deploy to Azure Container Apps, and verify via smoke tests.
EmeaAppGbb/spec2cloud
Generate API contracts, shared TypeScript types, and infrastructure resource definitions from Gherkin scenarios and test files.
EmeaAppGbb/spec2cloud
Create Domain-Driven Design proposals from product specs or brownfield extraction outputs.
EmeaAppGbb/spec2cloud
Write application code to make failing tests pass using contract-driven, slice-based architecture.
EmeaAppGbb/spec2cloud
Review PRDs and FRDs through product and technical lenses. An agent skill from EmeaAppGbb/spec2cloud.
EmeaAppGbb/spec2cloud
Read, write, and maintain .spec2cloud/state.json across phases and increments.
Works with
Categories
Catalog existing tests — discover test frameworks, count tests by type, parse coverage reports, and map test-to-feature relationships. Test Discovery is an agent skill from EmeaAppGbb/spec2cloud. Catalog existing tests — discover test frameworks, count tests by type, parse coverage reports, and map test-to-feature relationships.
Test Discovery fits situations like: you need a factual inventory of the testing landscape before migration; modernization planning.
Run `npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a claude-code`. Or copy the skill folder (.github/skills/test-discovery in EmeaAppGbb/spec2cloud) into .claude/skills/test-discovery in your project. Claude Code loads it when a task matches its description.
Run `npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a codex`. Or copy the skill folder (.github/skills/test-discovery in EmeaAppGbb/spec2cloud) into .agents/skills/test-discovery in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EmeaAppGbb/spec2cloud --skill test-discovery -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-discovery, .gemini/skills/test-discovery, .github/skills/test-discovery and .opencode/skills/test-discovery in your project.
SKILL.md names no scripts, command-line tools or credentials: Test Discovery is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Test Discovery is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Test Discovery: Unit Testing (petrkindlmann/qa-skills, 163 stars), Test Detect (davila7/claude-code-templates, 32k stars), Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars) and React Testing (affaan-m/ECC, 274k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
EmeaAppGbb (a GitHub organization) maintains it in EmeaAppGbb/spec2cloud, which has 100 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on April 16, 2026.
Source: EmeaAppGbb/spec2cloud on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.