Skill v1.0.0
currentTrusted Publisher100/100version: "1.0.0" name: run-smoke-tests description: Run smoke tests to verify extension functionality in a real VS Code environment. Use this when checking if basic features work after changes.
Run smoke tests to verify the extension loads and basic functionality works in a real VS Code environment.
When to Use This Skill
- After making changes to extension activation code
- After modifying commands or API exports
- Before submitting a PR to verify nothing is broken
- When the user asks to "run smoke tests" or "verify the extension works"
Quick Reference
| Action | Command | |
|---|---|---|
| Run all smoke tests | npm run compile && npm run compile-tests && npm run smoke-test | |
| Run specific test | npm run smoke-test -- --grep "Extension activates" | |
| Debug in VS Code | Debug panel → "Smoke Tests" → F5 |
How Smoke Tests Work
Unlike unit tests (which mock VS Code), smoke tests run inside a real VS Code instance:
npm run smoke-testuses@vscode/test-cli- The CLI downloads a standalone VS Code binary (cached in
.vscode-test/) - It launches that VS Code with your extension installed
- Mocha runs test files inside that VS Code process
- Results are reported back to your terminal
This is why smoke tests are slower (~10-60s) but catch real integration issues.
Workflow
Step 1: Compile and Run
npm run compile && npm run compile-tests && npm run smoke-test
Step 2: Interpret Results
Pass: 4 passing (2s) → Extension works, proceed.
Fail: See error message and check Debugging section.
Running Individual Tests
To run a specific test instead of the whole suite:
# By test name (grep pattern)npm run smoke-test -- --grep "Extension activates"# Or temporarily add .only in code:test.only('Extension activates without errors', ...)
Debugging Failures
| Error | Cause | Fix | |
|---|---|---|---|
Extension not installed | Build failed or ID mismatch | Run npm run compile, check extension ID | |
Extension did not become active | Error in activate() | Debug with F5, check Debug Console | |
Command not registered | Missing from package.json | Add to contributes.commands | |
Timeout exceeded | Slow startup or infinite loop | Increase timeout or check for blocking code |
For detailed debugging, use VS Code: Debug panel → "Smoke Tests" → F5
Adding New Smoke Tests
Create a new file in src/test/smoke/ with the naming convention *.smoke.test.ts:
import * as assert from 'assert';import * as vscode from 'vscode';import { waitForCondition } from '../testUtils';import { ENVS_EXTENSION_ID } from '../constants';suite('Smoke: [Feature Name]', function () {this.timeout(60_000);test('[Test description]', async function () {// Arrangeconst extension = vscode.extensions.getExtension(ENVS_EXTENSION_ID);assert.ok(extension, 'Extension not found');// Ensure extension is activeif (!extension.isActive) {await extension.activate();}// Actconst result = await someOperation();// Assertassert.strictEqual(result, expected, 'Description of what went wrong');});});
Key patterns:
- Use
waitForCondition()instead ofsleep()for async assertions - Set generous timeouts (
this.timeout(60_000)) - Include clear error messages in assertions
Test Files
| File | Purpose | |
|---|---|---|
src/test/smoke/activation.smoke.test.ts | Extension activation tests | |
src/test/smoke/index.ts | Test runner entry point | |
src/test/testUtils.ts | Utilities (waitForCondition, etc.) |
Prerequisites
- CI needs webpack build: The extension must be built with
npm run compile(webpack) before tests run. The test runner usesdist/extension.jswhich is only created by webpack, not bynpm run compile-tests(tsc) - Extension builds: Run
npm run compilebefore tests
Notes
- First run downloads VS Code (~100MB, cached in
.vscode-test/) - Tests auto-retry once on failure