Files
vscode/.github/skills/unit-tests/SKILL.md
Rob Lourens 23c0b41d69 Enable test/test-integration scripts to take file.test.ts arguments (#306039)
* Enable test/test-integration scripts to take file.test.ts arguments
The agent likes to use them this way, when it doesn't read the skill

Co-authored-by: Copilot <copilot@github.com>

* And this

* Fixes

* update

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>
2026-03-29 02:48:59 +00:00

106 lines
3.7 KiB
Markdown

---
name: unit-tests
description: Use when running unit tests in the VS Code repo. Covers the runTests tool, scripts/test.sh (macOS/Linux) and scripts/test.bat (Windows), and their supported arguments for filtering, globbing, and debugging tests.
---
# Running Unit Tests
## Preferred: Use the `runTests` tool
If the `runTests` tool is available, **prefer it** over running shell commands. It provides structured output with detailed pass/fail information and supports filtering by file and test name.
- Pass absolute paths to test files via the `files` parameter.
- Pass test names via the `testNames` parameter to filter which tests run.
- Set `mode="coverage"` to collect coverage.
Example (conceptual): run tests in `src/vs/editor/test/common/model.test.ts` with test name filter `"should split lines"`.
## Fallback: Shell scripts
When the `runTests` tool is not available (e.g. in CLI environments), use the platform-appropriate script from the repo root:
- **macOS / Linux:** `./scripts/test.sh [options]`
- **Windows:** `.\scripts\test.bat [options]`
These scripts download Electron if needed and launch the Mocha test runner.
### Commonly used options
#### Bare file paths - Run tests from specific files
Pass source file paths directly as positional arguments. The test runner automatically treats bare `.ts`/`.js` positional arguments as `--run` values.
```bash
./scripts/test.sh src/vs/editor/test/common/model.test.ts
```
```bat
.\scripts\test.bat src\vs\editor\test\common\model.test.ts
```
Multiple files:
```bash
./scripts/test.sh src/vs/editor/test/common/model.test.ts src/vs/editor/test/common/range.test.ts
```
#### `--run <file>` - Run tests from a specific file (explicit form)
Accepts a **source file path** (starting with `src/`). The runner strips the `src/` prefix and the `.ts`/`.js` extension automatically to resolve the compiled module.
```bash
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts
```
Multiple files can be specified by repeating `--run`:
```bash
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --run src/vs/editor/test/common/range.test.ts
```
#### `--grep <pattern>` (aliases: `-g`, `-f`) - Filter tests by name
Runs only tests whose full title matches the pattern (passed to Mocha's `--grep`).
```bash
./scripts/test.sh --grep "should split lines"
```
Combine with `--run` to filter tests within a specific file:
```bash
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --grep "should split lines"
```
#### `--runGlob <pattern>` (aliases: `--glob`, `--runGrep`) - Run tests matching a glob
Runs all test files matching a glob pattern against the compiled output directory. Useful for running all tests under a feature area.
```bash
./scripts/test.sh --runGlob "**/editor/test/**/*.test.js"
```
Note: the glob runs against compiled `.js` files in the output directory, not source `.ts` files.
#### `--coverage` - Generate a coverage report
```bash
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --coverage
```
#### `--timeout <ms>` - Set test timeout
Override the default Mocha timeout for long-running tests.
```bash
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --timeout 10000
```
### Integration tests
Integration tests (files ending in `.integrationTest.ts` or located in `extensions/`) are **not run** by `scripts/test.sh`. Use `scripts/test-integration.sh` (or `scripts/test-integration.bat`) instead. See the `integration-tests` skill for details.
### Compilation requirement
Tests run against compiled JavaScript output. Ensure the `VS Code - Build` watch task is running or that compilation has completed before running tests. Test failures caused by stale output are a common pitfall.