用途
vscode-test-setup 是一个用于 VS Code 扩展项目测试环境搭建与配置的技能,目标是实现快速且可靠的测试环境初始化。根据资料,其适用场景包括:
- 为新的 VS Code 扩展项目搭建测试基础设施
- 从一个测试框架迁移到另一个测试框架
- 为扩展测试配置 CI/CD 流水线
- 设置代码覆盖率工具与阈值
- 排查测试配置问题
- 优化测试执行性能
主要能力
技能提供以下配置与指导内容:
- 测试框架配置:Vitest 作为单元测试框架的完整配置;同时提供 Jest 作为替代方案。集成/E2E 测试因 VS Code 测试宿主需要 Mocha 测试运行器,仍保留 Mocha(通过 @vscode/test-electron)。
- 覆盖率工具:Vitest 内置覆盖率(使用 v8 或 c8 provider),无需额外覆盖率包;另提供 c8 与 NYC(@istanbuljs/nyc-config-typescript)的替代配置。
- CI/CD 集成:提供 GitHub Actions 的 test.yml 与 tdd-quality.yml 工作流示例,包含多操作系统矩阵(ubuntu、windows、macos)和 VS Code 版本矩阵(stable、insiders),以及 Coverage 上传到 codecov。
- VS Code 调试与任务配置:.vscode/launch.json 与 tasks.json 示例,包含运行扩展、运行集成测试、运行单元测试、调试当前测试文件等配置。
- 测试夹具与数据工厂:test-fixtures 工作区设置与 TestDataFactory 辅助类示例。
- 常见问题排查:CI 超时、ESM 导入错误、单元测试中 VS Code API 不可用、覆盖率未跟踪 TypeScript 文件、异步时序导致的测试不稳定。
使用方式
资料给出的快速开始步骤如下:
Step 1:安装依赖
# Core testing dependencies
npm install --save-dev \
vitest \
@vscode/test-cli \
@vscode/test-electron
# Coverage is built into Vitest (uses v8 or c8 provider)
# No additional coverage packages needed
Step 2:创建测试配置。可运行安装脚本自动创建全部所需配置文件:
# Execute from skill directory
python scripts/setup-test-env.py --project-path /path/to/extension
或手动创建 vitest.config.ts 与 tsconfig.test.json。
Step 3:配置 package.json 脚本(compile、compile:test、watch、pretest、test、test:unit、test:integration、test:coverage、test:watch,以及 tdd:red、tdd:green、tdd:refactor、tdd:quality-gate)。
Step 4:创建目录结构:src/test/ 下包含 unit(纯单元测试,不使用 VS Code API)、integration(需要 VS Code API)、e2e、fixtures、helpers 等目录,以及 test-fixtures 工作区。
框架与配置要点:
- Vitest 配置(vitest.config.ts)设置 globals、environment 为 node、include 指向 src/test/unit/**/*.test.ts、v8 覆盖率 provider、阈值(branches/functions/lines/statements 均为 80)、testTimeout 20000,并在 CI 环境下 retry 为 2。
- 单元测试 setup(src/test/unit/setup.ts)直接复用 Vitest 内置的 expect、vi、describe、it、beforeEach、afterEach,无需 chai、sinon 等额外库。
- 集成测试 setup(src/test/integration/setup.ts)使用 Mocha,通过 glob 收集 **/*.test.js 文件并运行。
- 若使用 Jest 替代,提供 jest.config.js 示例,包含 ts-jest preset、覆盖率阈值 80、setupFilesAfterEnv 以及将 vscode 映射到 mock 的 moduleNameMapper。
- 覆盖率替代配置:c8(package.json 中的 c8 字段)与 NYC(.nycrc.json)。
CI/CD 配置要点:
- test.yml:在 push(main、develop)与 pull_request(main)时触发,使用 os 与 vscode-version 矩阵,fail-fast 为 false;步骤包含 checkout、setup-node(Node 20、npm 缓存)、npm ci、compile、单元测试、集成测试(Linux 使用 xvfb-run -a;Windows/macOS 直接运行)、上传覆盖率(仅在 ubuntu-latest 且 stable 时,fail_ci_if_error 为 true),另含 lint 作业。
- tdd-quality.yml:在 push(main)与 pull_request 时触发,执行 TDD Quality Gate(npm run tdd:quality-gate)、检查覆盖率阈值、生成覆盖率报告并以上传产物方式保留 coverage/。
调试配置要点:.vscode/launch.json 提供 Run Extension、Run Integration Tests、Run Unit Tests、Debug Current Test File 四种配置;.vscode/tasks.json 提供 compile、watch、test:unit、test:coverage 任务。
适用场景与限制
适用场景包括新项目测试基础设施初始化、测试框架迁移、CI/CD 流水线配置、覆盖率工具与阈值设置、测试配置问题排查和测试执行性能优化。
限制与注意事项:
- 集成/E2E 测试由于 VS Code 测试宿主需 Mocha 测试运行器,仍使用 Mocha,而非 Vitest。
- 单元测试不使用 VS Code API,需与集成测试分离,并使用 VS Code API mock;vitest.config.ts 中可通过 alias 将 vscode 指向 src/test/helpers/vscode-mock.ts。
- Linux 无头测试需使用 xvfb-run。
- 覆盖率阈值默认设为 80(branches、functions、lines、statements)。
- 关于该技能的收费、价格、平台支持范围等事实,资料暂未提供。