Skip to main content

test

Generate or run tests. Auto-detects test framework, generates comprehensive tests for source files, or runs existing test suites with failure analysis.

Source facts

Repository
gsd-build/gsd-2
Last source activity
April 27, 2026 at 04:24
Detected SKILL.md language
English
Stars
7,781
Forks
759

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
test
description
Generate or run tests. Auto-detects test framework, generates comprehensive tests for source files, or runs existing test suites with failure analysis.
<objective> Generate or run tests for the current project. This skill auto-detects the test framework in use, generates comprehensive tests for source files, or runs existing test suites and analyzes failures. Accepts optional arguments: - A file path: generate tests for that source file - `run`: run the existing test suite and analyze results - No arguments: suggest what to test based on recent changes </objective> <context> This skill handles test generation and execution across multiple languages and frameworks. It adapts to whatever testing conventions the project already uses rather than imposing new ones. </context> <quick_start> <step_1_detect_framework> **Detect the test framework and conventions before doing anything else.** Check these sources in order: 1. **package.json** (Node/JS/TS projects): - `scripts.test` for the test command - `devDependencies` for jest, vitest, mocha, ava, tap, node:test, playwright, cypress - `jest` or `vitest` config keys 2. **Config files**: - `jest.config.*`, `vitest.config.*`, `.mocharc.*`, `ava.config.*` - `pytest.ini`, `pyproject.toml` (look for `[tool.pytest]`), `setup.cfg` - `go.mod` (Go projects use `go test` by default) - `Cargo.toml` (Rust projects use `cargo test`) 3. **Existing test files**: - Scan for `*.test.*`, `*.spec.*`, `*_test.*`, `test_*.*` files - Read 1-2 existing test files to understand patterns, imports, assertion style, and structure - Note the directory structure (co-located tests vs `__tests__/` vs `tests/` vs `test/`) 4. **Record your findings**: - Framework name and version - Test file naming convention - Test file location convention - Import/require style - Assertion style (expect, assert, chai, etc.) - Any custom utilities, fixtures, or helpers used </step_1_detect_framework> <step_2_handle_arguments> **Route based on the argument provided.** - **File path given** -> Go to `generate_tests` - **"run" given** -> Go to `run_tests` - **No arguments** -> Go to `suggest_tests` </step_2_handle_arguments> <generate_tests> **Generate tests for the specified source file.** **A. Read and analyze the source file:** - Identify all exported/public functions, classes, methods, and types - Understand each function's parameters, return types, and side effects - Note error handling patterns (throws, returns null, returns Result, etc.) - Identify dependencies that will need mocking **B. Read existing test files in the project (1-2 files minimum):** - Match their import style exactly - Match their describe/it or test block structure - Match their assertion patterns - Match their mock/stub approach - Use the same test utilities and helpers **C. Generate tests covering:** 1. **Happy paths**: Normal expected inputs produce correct outputs 2. **Edge cases**: - Empty inputs (empty string, empty array, null, undefined, zero) - Boundary values (min/max integers, very long strings) - Single element collections 3. **Error handling**: - Invalid inputs that should throw or return errors - Missing required parameters - Type mismatches (if applicable) 4. **Async behavior** (if the function is async): - Successful resolution - Rejection/error cases - Timeout scenarios (if relevant) 5. **Dependencies**: - Mock external dependencies (APIs, databases, file system) - Verify correct interaction with dependencies (called with right args) **D. Place the test file correctly:** - Follow the project's existing convention for test file location - Use the project's naming convention (`.test.ts`, `.spec.js`, `_test.go`, `test_*.py`, etc.) **E. Run the generated tests immediately to verify they pass.** - If tests fail, read the error output carefully - Fix the test code (not the source code) - Re-run until all tests pass </generate_tests> <run_tests> **Run the existing test suite and analyze results.** **A. Determine the test command:** - Check `package.json` `scripts.test` for Node projects - Use `pytest` for Python projects - Use `go test ./...` for Go projects - Use `cargo test` for Rust projects - Fall back to the detected framework's CLI **B. Run the tests:** - Execute the test command - Capture full output including failures and errors **C. Analyze results:** - Report total passed, failed, skipped counts - For each failure: - Identify the failing test name and file - Show the assertion that failed (expected vs actual) - Read the relevant source code if needed - Provide a specific diagnosis of why it failed - Suggest a concrete fix (is it a test bug or a source bug?) **D. Present a summary:** ``` Test Results: X passed, Y failed, Z skipped Failures: 1. [test name] - [brief diagnosis] Fix: [specific suggestion] 2. [test name] - [brief diagnosis] Fix: [specific suggestion] ``` </run_tests> <suggest_tests> **Suggest what to test when no arguments are given.** **A. Check recent changes:** > **Working directory check:** if your dispatch context specifies a working directory and `pwd` does not match it, prefix the git commands below with `-C <that path>` (e.g. `git -C /path/to/worktree diff --name-only HEAD~5`). - Run `git diff --name-only HEAD~5` to find recently changed files - Run `git diff --name-only --cached` for staged files - Filter to source files (exclude configs, docs, lockfiles) **B. Check test coverage gaps:** - Find source files that have no corresponding test file - Prioritize files that were recently modified **C. Present suggestions:** ``` Suggested files to test (based on recent changes and coverage gaps): 1. [file path] - modified recently, no test file exists 2. [file path] - modified recently, tests exist but may need updating 3. [file path] - no test coverage found Run `/test <file path>` to generate tests for any of these. Run `/test run` to run the existing test suite. ``` </suggest_tests> </quick_start> <critical_rules> 1. **MATCH EXISTING PATTERNS**: Never impose a new test style. Always mirror what the project already does. 2. **READ BEFORE WRITING**: Always read existing test files before generating new ones. 3. **VERIFY GENERATED TESTS**: Always run generated tests. Untested test code is unreliable. 4. **DON'T MODIFY SOURCE CODE**: If generated tests fail, fix the tests, not the source. If the source has a real bug, report it to the user. 5. **MOCK EXTERNAL DEPENDENCIES**: Never let tests hit real APIs, databases, or file systems unless the project explicitly uses integration tests that way. 6. **ONE FILE AT A TIME**: Generate tests for one source file per invocation. Keep scope manageable. 7. **USE PROJECT DEPENDENCIES**: Only use test libraries already installed in the project. Do not add new dependencies without asking. </critical_rules> <success_criteria> Before completing: - [ ] Test framework and conventions were detected correctly - [ ] Generated tests match the project's existing test style - [ ] All generated tests pass when run - [ ] Tests cover happy paths, edge cases, and error handling - [ ] Test file is placed in the correct location with the correct naming convention - [ ] No source code was modified </success_criteria>
View on GitHub