/configure:tests Check and configure testing frameworks against best practices (Vitest, Jest, pytest, cargo-nextest). When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Setting up testing infrastructure | Just running tests (use skill) | | Checking test framework configuration | Tests already properly configured | | Migrating to modern test frameworks (Vitest, pytest, nextest) | Writing individual tests (write tests directly) | | Validating coverage configuration | Debugging failing tests (check test out…

: ['ts-jest', {\n tsconfig: 'tsconfig.json',\n }],\n },\n\n collectCoverageFrom: [\n 'src/**/*.{js,jsx,ts,tsx}',\n '!src/**/*.d.ts',\n '!src/**/*.stories.tsx',\n ],\n\n coverageThresholds: {\n global: {\n lines: 80,\n functions: 80,\n branches: 80,\n statements: 80,\n },\n },\n\n moduleNameMapper: {\n '^@/(.*)

/configure:tests Check and configure testing frameworks against best practices (Vitest, Jest, pytest, cargo-nextest). When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Setting up testing infrastructure | Just running tests (use skill) | | Checking test framework configuration | Tests already properly configured | | Migrating to modern test frameworks (Vitest, pytest, nextest) | Writing individual tests (write tests directly) | | Validating coverage configuration | Debugging failing tests (check test out…

: '\u003crootDir>/src/$1',\n },\n\n setupFilesAfterEnv: ['\u003crootDir>/tests/setup.ts'],\n};\n\nexport default config;\n```\n\n## Python pytest Configuration\n\n### pyproject.toml Template\n\n```toml\n[tool.pytest.ini_options]\ntestpaths = [\"tests\"]\npython_files = [\"test_*.py\", \"*_test.py\"]\npython_classes = [\"Test*\"]\npython_functions = [\"test_*\"]\n\naddopts = [\n \"-v\",\n \"--strict-markers\",\n \"--strict-config\",\n \"--cov=src\",\n \"--cov-report=term-missing\",\n \"--cov-report=html\",\n \"--cov-report=xml\",\n \"--cov-fail-under=80\",\n]\n\nmarkers = [\n \"unit: Unit tests\",\n \"integration: Integration tests\",\n \"e2e: End-to-end tests\",\n \"slow: Slow running tests\",\n]\n\n[tool.coverage.run]\nsource = [\"src\"]\nomit = [\n \"*/tests/*\",\n \"*/migrations/*\",\n \"*/__init__.py\",\n]\n\n[tool.coverage.report]\nexclude_lines = [\n \"pragma: no cover\",\n \"def __repr__\",\n \"if __name__ == .__main__.:\",\n \"raise AssertionError\",\n \"raise NotImplementedError\",\n \"if 0:\",\n \"if False:\",\n \"if TYPE_CHECKING:\",\n]\n```\n\n### Install Dependencies\n\n```bash\nuv add --group dev pytest pytest-cov pytest-asyncio pytest-mock\n```\n\n## Rust cargo-nextest Configuration\n\n### Install\n\n```bash\ncargo install cargo-nextest --locked\n```\n\n### .nextest.toml Template\n\n```toml\n[profile.default]\nretries = 0\nfail-fast = false\n\n# Run tests with all features enabled\ntest-threads = \"num-cpus\"\n\n[profile.ci]\nretries = 2\nfail-fast = true\ntest-threads = 2\n\n# JUnit output for CI\n[profile.ci.junit]\npath = \"target/nextest/ci/junit.xml\"\n\n[profile.default.junit]\npath = \"target/nextest/default/junit.xml\"\n```\n\n### Optional cargo alias (.cargo/config.toml)\n\n```toml\n[alias]\ntest = \"nextest run\"\n```\n\n## Test Directory Structures\n\n### JavaScript/TypeScript\n\n```\ntests/\n├── setup.ts # Test setup and global mocks\n├── unit/ # Unit tests\n│ └── utils.test.ts\n├── integration/ # Integration tests\n│ └── api.test.ts\n└── e2e/ # E2E tests\n └── user-flow.test.ts\n```\n\n### Python\n\n```\ntests/\n├── conftest.py # pytest fixtures and configuration\n├── unit/ # Unit tests\n│ └── test_utils.py\n├── integration/ # Integration tests\n│ └── test_api.py\n└── e2e/ # E2E tests\n └── test_user_flow.py\n```\n\n### Rust\n\n```\ntests/\n├── integration_test.rs # Integration tests\n└── common/ # Shared test utilities\n └── mod.rs\n```\n\n## CI/CD Integration Templates\n\n### JavaScript/TypeScript (Vitest)\n\n```yaml\n- name: Run tests\n run: npm test -- --reporter=junit --reporter=default --coverage\n\n- name: Upload coverage\n uses: codecov/codecov-action@v4\n with:\n files: ./coverage/lcov.info\n```\n\n### Python (pytest)\n\n```yaml\n- name: Run tests\n run: |\n uv run pytest --junitxml=junit.xml --cov-report=xml\n\n- name: Upload coverage\n uses: codecov/codecov-action@v4\n with:\n files: ./coverage.xml\n```\n\n### Rust (cargo-nextest)\n\n```yaml\n- name: Install nextest\n uses: taiki-e/install-action@nextest\n\n- name: Run tests\n run: cargo nextest run --profile ci --no-fail-fast\n\n- name: Upload test results\n uses: actions/upload-artifact@v4\n with:\n name: test-results\n path: target/nextest/ci/junit.xml\n```\n\n## Migration Guides\n\n### Jest to Vitest\n\n1. **Update dependencies:**\n ```bash\n npm uninstall jest @types/jest\n npm install --save-dev vitest @vitest/ui @vitest/coverage-v8\n ```\n\n2. **Rename config file:**\n ```bash\n mv jest.config.ts vitest.config.ts\n ```\n\n3. **Update test imports:**\n ```typescript\n // Before (Jest)\n import { describe, it, expect } from '@jest/globals';\n\n // After (Vitest with globals)\n // No import needed if globals: true in config\n ```\n\n4. **Update package.json scripts:**\n ```json\n {\n \"scripts\": {\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n }\n }\n ```\n\n### unittest to pytest (Python)\n\n1. **Install pytest:**\n ```bash\n uv add --group dev pytest pytest-cov\n ```\n\n2. **Convert test files:**\n ```python\n # Before (unittest)\n import unittest\n class TestExample(unittest.TestCase):\n def test_something(self):\n self.assertEqual(1, 1)\n\n # After (pytest)\n def test_something():\n assert 1 == 1\n ```\n\n3. **Convert assertions:**\n - `self.assertEqual(a, b)` -> `assert a == b`\n - `self.assertTrue(x)` -> `assert x`\n - `self.assertRaises(Error)` -> `with pytest.raises(Error):`\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":8009,"content_sha256":"9b9c8fc0dfe944f620f9b05ce58dae291ee6bed62c9abf9c4358793d2b38cfc9"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"/configure:tests","type":"text"}]},{"type":"paragraph","content":[{"text":"Check and configure testing frameworks against best practices (Vitest, Jest, pytest, cargo-nextest).","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use This Skill","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use this skill when...","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use another approach when...","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Setting up testing infrastructure","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Just running tests (use ","type":"text"},{"text":"/test:run","type":"text","marks":[{"type":"code_inline"}]},{"text":" skill)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Checking test framework configuration","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Tests already properly configured","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Migrating to modern test frameworks (Vitest, pytest, nextest)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Writing individual tests (write tests directly)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Validating coverage configuration","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Debugging failing tests (check test output)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ensuring test best practices","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Simple project with no testing needed","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Context","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Package.json: !","type":"text"},{"text":"find . -maxdepth 1 -name \\'package.json\\'","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pyproject.toml: !","type":"text"},{"text":"find . -maxdepth 1 -name \\'pyproject.toml\\'","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cargo.toml: !","type":"text"},{"text":"find . -maxdepth 1 -name \\'Cargo.toml\\'","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test config files: !","type":"text"},{"text":"find . -maxdepth 1 \\( -name 'vitest.config.*' -o -name 'jest.config.*' -o -name 'pytest.ini' -o -name '.nextest.toml' \\)","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pytest in pyproject: !","type":"text"},{"text":"grep -c 'tool.pytest' pyproject.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test directories: !","type":"text"},{"text":"find . -maxdepth 2 -type d \\( -name 'tests' -o -name '__tests__' -o -name 'test' \\)","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test scripts in package.json: !","type":"text"},{"text":"grep -m5 -o '\"test[^\"]*\"' package.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Coverage config: !","type":"text"},{"text":"grep -l 'coverage' vitest.config.* jest.config.*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Project standards: !","type":"text"},{"text":"find . -maxdepth 1 -name '.project-standards.yaml' -type f","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"Modern testing stack preferences:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"JavaScript/TypeScript","type":"text","marks":[{"type":"strong"}]},{"text":": Vitest (preferred) or Jest","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Python","type":"text","marks":[{"type":"strong"}]},{"text":": pytest with pytest-cov","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Rust","type":"text","marks":[{"type":"strong"}]},{"text":": cargo-nextest for improved performance","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Parameters","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse these from ","type":"text"},{"text":"$ARGUMENTS","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Flag","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--check-only","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Report status without offering fixes","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--fix","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Apply all fixes automatically without prompting","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--framework \u003cframework>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Override framework detection (","type":"text"},{"text":"vitest","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"jest","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"pytest","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"nextest","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Version Checking","type":"text"}]},{"type":"paragraph","content":[{"text":"CRITICAL","type":"text","marks":[{"type":"strong"}]},{"text":": Before flagging outdated versions, verify latest releases:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Vitest","type":"text","marks":[{"type":"strong"}]},{"text":": Check ","type":"text"},{"text":"vitest.dev","type":"text","marks":[{"type":"link","attrs":{"href":"https://vitest.dev/","title":null}}]},{"text":" or ","type":"text"},{"text":"GitHub releases","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/vitest-dev/vitest/releases","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Jest","type":"text","marks":[{"type":"strong"}]},{"text":": Check ","type":"text"},{"text":"jestjs.io","type":"text","marks":[{"type":"link","attrs":{"href":"https://jestjs.io/","title":null}}]},{"text":" or ","type":"text"},{"text":"npm","type":"text","marks":[{"type":"link","attrs":{"href":"https://www.npmjs.com/package/jest","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"pytest","type":"text","marks":[{"type":"strong"}]},{"text":": Check ","type":"text"},{"text":"pytest.org","type":"text","marks":[{"type":"link","attrs":{"href":"https://pytest.org/","title":null}}]},{"text":" or ","type":"text"},{"text":"PyPI","type":"text","marks":[{"type":"link","attrs":{"href":"https://pypi.org/project/pytest/","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"cargo-nextest","type":"text","marks":[{"type":"strong"}]},{"text":": Check ","type":"text"},{"text":"nexte.st","type":"text","marks":[{"type":"link","attrs":{"href":"https://nexte.st/","title":null}}]},{"text":" or ","type":"text"},{"text":"GitHub releases","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/nextest-rs/nextest/releases","title":null}}]}]}]}]},{"type":"paragraph","content":[{"text":"Use WebSearch or WebFetch to verify current versions before reporting outdated frameworks.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Execution","type":"text"}]},{"type":"paragraph","content":[{"text":"Execute this testing framework compliance check:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1: Detect framework","type":"text"}]},{"type":"paragraph","content":[{"text":"Identify the project language and existing test framework:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Indicator","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Language","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Detected Framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"vitest.config.*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JavaScript/TypeScript","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Vitest","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"jest.config.*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JavaScript/TypeScript","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Jest","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pyproject.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" [tool.pytest]","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest.ini","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cargo.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rust","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cargo test","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":".nextest.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rust","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cargo-nextest","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"--framework","type":"text","marks":[{"type":"code_inline"}]},{"text":" flag is provided, use that value instead.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2: Analyze current state","type":"text"}]},{"type":"paragraph","content":[{"text":"Read the detected framework's configuration and check completeness. For each framework, verify:","type":"text"}]},{"type":"paragraph","content":[{"text":"Vitest:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Config file exists (","type":"text"},{"text":"vitest.config.ts","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":".js","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"globals: true","type":"text","marks":[{"type":"code_inline"}]},{"text":" configured for compatibility","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"environment","type":"text","marks":[{"type":"code_inline"}]},{"text":" set appropriately (jsdom, happy-dom, node)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Coverage configured with ","type":"text"},{"text":"@vitest/coverage-v8","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"@vitest/coverage-istanbul","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Watch mode exclusions configured","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Jest:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Config file exists (","type":"text"},{"text":"jest.config.js","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":".ts","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"testEnvironment","type":"text","marks":[{"type":"code_inline"}]},{"text":" configured","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Coverage configuration present","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Transform configured for TypeScript/JSX","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Module path aliases configured","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"pytest:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"pyproject.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" has ","type":"text"},{"text":"[tool.pytest.ini_options]","type":"text","marks":[{"type":"code_inline"}]},{"text":" section","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"testpaths","type":"text","marks":[{"type":"code_inline"}]},{"text":" configured","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"addopts","type":"text","marks":[{"type":"code_inline"}]},{"text":" includes useful flags (","type":"text"},{"text":"-v","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--strict-markers","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"markers","type":"text","marks":[{"type":"code_inline"}]},{"text":" defined for test categorization","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"pytest-cov","type":"text","marks":[{"type":"code_inline"}]},{"text":" installed","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"cargo-nextest:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".nextest.toml","type":"text","marks":[{"type":"code_inline"}]},{"text":" exists","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Profile configurations (default, ci)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Retry policy configured","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test groups defined if needed","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3: Report results","type":"text"}]},{"type":"paragraph","content":[{"text":"Print a compliance report with:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Detected framework and version","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Configuration check results for each item","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Test organization (unit/integration/e2e directories)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Package scripts status (test, test:watch, test:coverage)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Overall issue count and recommendations","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"--check-only","type":"text","marks":[{"type":"code_inline"}]},{"text":", stop here.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4: Apply fixes (if --fix or user confirms)","type":"text"}]},{"type":"paragraph","content":[{"text":"Install dependencies and create configuration using templates from ","type":"text"},{"text":"REFERENCE.md","type":"text","marks":[{"type":"link","attrs":{"href":"REFERENCE.md","title":null}}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing config","type":"text","marks":[{"type":"strong"}]},{"text":": Create framework config file from template","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": Install required packages","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing coverage","type":"text","marks":[{"type":"strong"}]},{"text":": Add coverage configuration with 80% threshold","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing scripts","type":"text","marks":[{"type":"strong"}]},{"text":": Add test scripts to package.json","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing test directories","type":"text","marks":[{"type":"strong"}]},{"text":": Create standard test directory structure","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 5: Set up test organization","type":"text"}]},{"type":"paragraph","content":[{"text":"Create standard test directory structure for the detected language. See directory structure patterns in ","type":"text"},{"text":"REFERENCE.md","type":"text","marks":[{"type":"link","attrs":{"href":"REFERENCE.md","title":null}}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 6: Configure CI/CD integration","type":"text"}]},{"type":"paragraph","content":[{"text":"Check for test commands in GitHub Actions workflows. If missing, add CI test commands using the CI templates from ","type":"text"},{"text":"REFERENCE.md","type":"text","marks":[{"type":"link","attrs":{"href":"REFERENCE.md","title":null}}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 7: Handle migration (if upgrading)","type":"text"}]},{"type":"paragraph","content":[{"text":"If migrating between frameworks (e.g., Jest to Vitest, unittest to pytest), follow the migration guide in ","type":"text"},{"text":"REFERENCE.md","type":"text","marks":[{"type":"link","attrs":{"href":"REFERENCE.md","title":null}}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 8: Update standards tracking","type":"text"}]},{"type":"paragraph","content":[{"text":"Update ","type":"text"},{"text":".project-standards.yaml","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"yaml"},"content":[{"text":"standards_version: \"2025.1\"\nlast_configured: \"\u003ctimestamp>\"\ncomponents:\n tests: \"2025.1\"\n tests_framework: \"\u003cvitest|jest|pytest|nextest>\"\n tests_coverage_threshold: 80\n tests_ci_integrated: true","type":"text"}]},{"type":"paragraph","content":[{"text":"For detailed configuration templates, migration guides, CI/CD integration examples, and directory structure patterns, see ","type":"text"},{"text":"REFERENCE.md","type":"text","marks":[{"type":"link","attrs":{"href":"REFERENCE.md","title":null}}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Agentic Optimizations","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Context","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Detect test framework","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"find . -maxdepth 1 \\( -name 'vitest.config.*' -o -name 'jest.config.*' -o -name 'pytest.ini' \\) 2>/dev/null","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Check coverage config","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"grep -l 'coverage' package.json pyproject.toml 2>/dev/null","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"List test files","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"find . \\( -path '*/tests/*' -o -path '*/test/*' -o -name '*.test.*' -o -name '*.spec.*' \\) 2>/dev/null | head -n 10","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Quick compliance check","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/configure:tests --check-only","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Auto-fix configuration","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/configure:tests --fix","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Error Handling","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"No package.json found","type":"text","marks":[{"type":"strong"}]},{"text":": Cannot configure JS/TS tests, skip or error","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Conflicting frameworks","type":"text","marks":[{"type":"strong"}]},{"text":": Warn about multiple test configs, require manual resolution","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": Offer to install required packages","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Invalid config syntax","type":"text","marks":[{"type":"strong"}]},{"text":": Report parse error, offer to replace with template","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"See Also","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/configure:coverage","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Configure coverage thresholds and reporting","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/configure:all","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Run all compliance checks","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/test:run","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Universal test runner","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/test:setup","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Comprehensive testing infrastructure setup","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Vitest documentation","type":"text","marks":[{"type":"strong"}]},{"text":": https://vitest.dev","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"pytest documentation","type":"text","marks":[{"type":"strong"}]},{"text":": https://docs.pytest.org","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"cargo-nextest documentation","type":"text","marks":[{"type":"strong"}]},{"text":": https://nexte.st","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"args":"[--check-only] [--fix] [--framework \u003cvitest|jest|pytest|nextest>]","date":"2026-06-05","name":"configure-tests","author":"@skillopedia","source":{"stars":35,"repo_name":"claude-plugins","origin_url":"https://github.com/laurigates/claude-plugins/blob/HEAD/configure-plugin/skills/configure-tests/SKILL.md","repo_owner":"laurigates","body_sha256":"ba39a554da7e92785525e0f4b2bc8ec7a50b98ae807e4825fea23c8264b453d2","cluster_key":"da8ca684b9c82fe407c77636be11b63e08647c1353fc6ef9698d9bef05799e74","clean_bundle":{"format":"clean-skill-bundle-v1","source":"laurigates/claude-plugins/configure-plugin/skills/configure-tests/SKILL.md","attachments":[{"id":"6fc8efe8-7f3b-523a-bc0a-e212ee4bd3d6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6fc8efe8-7f3b-523a-bc0a-e212ee4bd3d6/attachment.md","path":"REFERENCE.md","size":8009,"sha256":"9b9c8fc0dfe944f620f9b05ce58dae291ee6bed62c9abf9c4358793d2b38cfc9","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"ce203dd38b6dd0c151bb1c0cbbe04846d5631319c7a3f3f0b01bf097a8ceaf88","attachment_count":1,"text_attachments":1,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"configure-plugin/skills/configure-tests/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"testing-qa","category_label":"Testing"},"exact_dupes_collapsed_into_this":0},"created":"2025-12-16T00:00:00.000Z","version":"v1","category":"testing-qa","modified":"2026-05-09T00:00:00.000Z","reviewed":"2025-12-16T00:00:00.000Z","import_tag":"clean-skills-v1","description":"Test frameworks: Vitest, Jest, pytest, cargo-nextest. Use when setting up test infrastructure, migrating to a modern framework, or validating coverage config.","allowed-tools":"Glob, Grep, Read, Write, Edit, Bash, AskUserQuestion, TodoWrite, WebSearch, WebFetch","argument-hint":"[--check-only] [--fix] [--framework \u003cvitest|jest|pytest|nextest>]"}},"renderedAt":1782987528348}

/configure:tests Check and configure testing frameworks against best practices (Vitest, Jest, pytest, cargo-nextest). When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Setting up testing infrastructure | Just running tests (use skill) | | Checking test framework configuration | Tests already properly configured | | Migrating to modern test frameworks (Vitest, pytest, nextest) | Writing individual tests (write tests directly) | | Validating coverage configuration | Debugging failing tests (check test out…