Skill

integration-tests

Use when running integration tests in the VS Code repo. Covers scripts/test-integration.sh (macOS/Linux) and scripts/test-integration.bat (Windows), their supported arguments for filtering, and the difference between node.js integration tests and extension host tests.

Freerisk: low
integrationtestsjavascripttypescriptgit

The full skill

— name: integration-tests description: Use when running integration tests in the VS Code repo. Covers scripts/test-integration.sh (macOS/Linux) and scripts/test-integration.bat (Windows), their supported arguments for filtering, and the difference between node.js integration tests and extension host tests. — # Running Integration Tests Integration tests in VS Code are split into two categories: 1. **Node.js integration tests** – files ending in `.integrationTest.ts` under `src/`. These run in Electron via the same Mocha runner as unit tests. 2. **Extension host tests** – tests embedded in built-in extensions under `extensions/` (API tests, Git tests, TypeScript tests, etc.). These launch a full VS Code instance with `–extensionDevelopmentPath`. ## Scripts – **macOS / Linux:** `./scripts/test-integration.sh [options]` – **Windows:** `.\scripts\test-integration.bat [options]` When run **without filters**, both scripts execute all node.js integration tests followed by all extension host tests. When run **with `–run` or `–runGlob`** (without `–suite`), only the node.js integration tests are run and the filter is applied. Extension host tests are skipped since these filters are node.js-specific. When run **with `–grep` alone** (no `–run`, `–runGlob`, or `–suite`), all tests are run — both node.js integration tests and all extension host suites — with the grep pattern forwarded to every test runner. When run **with `–suite`**, only the matching extension host test suites are run. Node.js integration tests are skipped. Combine `–suite` with `–grep` to filter individual tests within the selected suites. ## Options ### `–run <file>` – Run tests from a specific file Accepts a **source file path** (starting with `src/`). Works identically to `scripts/test.sh –run`. “`bash ./scripts/test-integration.sh –run src/vs/workbench/services/search/test/browser/search.integrationTest.ts “` ### `–runGlob <pattern>` (aliases: `–glob`, `–runGrep`) – Select test files by path Selects which test **files** to load by matching compiled `.js` file paths against a glob pattern. Overrides the default `**/*.integrationTest.js` glob. Only applies to node.js integration tests (extension host tests are skipped). “`bash ./scripts/test-integration.sh –runGlob "**/search/**/*.integrationTest.js" “` ### `–grep <pattern>` (aliases: `-g`, `-f`) – Filter test cases by name Filters which **test cases** run by matching against their test titles (e.g. `describe`/`test` names). When used alone, the grep is applied to both node.js integration tests and all extension host suites. When combined with `–suite`, only the matched suites run with the grep. “`bash ./scripts/test-integration.sh –grep "TextSearchProvider" “` ### `–suite <pattern>` – Run specific extension host test suites Runs only the extension host test suites whose name matches the pattern. Supports comma-separated values and shell glob patterns (on macOS/Linux). Node.js integration tests are skipped. Available suite names: `api-folder`, `api-workspace`, `colorize`, `terminal-suggest`, `typescript`, `markdown`, `emmet`, `git`, `git-base`, `ipynb`, `notebook-renderers`, `configuration-editing`, `github-authentication`, `css`, `html`. “`bash # Run only Git extension tests ./scripts/test-integration.sh –suite git # Run API folder and workspace tests (glob, macOS/Linux only) ./scripts/test-integration.sh –suite 'api*' # Run multiple specific suites ./scripts/test-integration.sh –suite 'git,emmet,typescript' # Filter tests within a suite by name ./scripts/test-integration.sh –suite api-folder –grep 'should open' “` ### `–help`, `-h` – Show help “`bash ./scripts/test-integration.sh –help “` ### Other options All other options (e.g. `–timeout`, `–coverage`, `–reporter`) are forwarded to the underlying `scripts/test.sh` runner for node.js integration tests. These extra options are **not** forwarded to extension host suites when using `–suite`. ## Examples “`bash # Run all integration tests (node.js + extension host) ./scripts/test-integration.sh # Run a single integration test file ./scripts/test-integration.sh –run src/vs/workbench/services/search/test/browser/search.integrationTest.ts # Run integration tests matching a grep pattern ./scripts/test-integration.sh –grep "TextSearchProvider" # Run integration tests under a specific area ./scripts/test-integration.sh –runGlob "**/workbench/**/*.integrationTest.js" # Run only Git extension host tests ./scripts/test-integration.sh –suite git # Run API folder + workspace extension tests (glob) ./scripts/test-integration.sh –suite 'api*' # Run multiple extension test suites ./scripts/test-integration.sh –suite 'git,typescript,emmet' # Grep for specific tests in the API folder suite ./scripts/test-integration.sh –suite api-folder –grep 'should open' # Combine file and grep ./scripts/test-integration.sh –run src/vs/workbench/services/search/test/browser/search.integrationTest.ts –grep "should search" “` ## 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. ## Distinction from unit tests – **Unit tests** (`.test.ts`) → use `scripts/test.sh` or the `runTests` tool – **Integration tests** (`.integrationTest.ts` and extension tests) → use `scripts/test-integration.sh` Do **not** mix these up: `scripts/test.sh` will not find integration test files unless you explicitly pass `–runGlob **/*.integrationTest.js`, and `scripts/test-integration.sh` is not intended for `.test.ts` files.