Skip to main content

run-smoke-tests

Run smoke tests to verify extension functionality in a real VS Code environment. Use this when checking if basic features work after changes.

Informações da origem

Repositório
microsoft/vscode-python-environments
Última atividade na origem
12 de fevereiro de 2026 às 17:57
Idioma detectado do SKILL.md
inglês
Estrelas
145
Forks
77

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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**: 1. `npm run smoke-test` uses `@vscode/test-cli` 2. The CLI downloads a standalone VS Code binary (cached in `.vscode-test/`) 3. It launches that VS Code with your extension installed 4. Mocha runs test files inside that VS Code process 5. 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 ```bash 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: ```bash # 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`: ```typescript 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 () { // Arrange const extension = vscode.extensions.getExtension(ENVS_EXTENSION_ID); assert.ok(extension, 'Extension not found'); // Ensure extension is active if (!extension.isActive) { await extension.activate(); } // Act const result = await someOperation(); // Assert assert.strictEqual(result, expected, 'Description of what went wrong'); }); }); ``` **Key patterns:** - Use `waitForCondition()` instead of `sleep()` 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 uses `dist/extension.js` which is only created by webpack, not by `npm run compile-tests` (tsc) - **Extension builds**: Run `npm run compile` before tests ## Notes - First run downloads VS Code (~100MB, cached in `.vscode-test/`) - Tests auto-retry once on failure
Ver no GitHub