用途
该技能用于在 VS Code 仓库中运行单元测试,覆盖首选工具与回退脚本两种方式,并说明常用参数、集成测试区别以及编译前提。
主要能力
首选:使用 runTests 工具
如果 runTests 工具可用,应优先使用它,而不是运行 shell 命令。它提供结构化的输出,包含详细的通过/失败信息,并支持按文件和测试名称过滤。
- 通过 files 参数传入测试文件的绝对路径。
- 通过 testNames 参数传入测试名称,以过滤要运行的测试。
- 设置 mode="coverage" 以收集覆盖率。
该工具运行由 VS Code 已注册的测试控制器发现的测试;它不会编译仓库,也不会调用 shell 测试命令。如果发现不可用、处于待处理状态或报告没有执行任何测试,应将请求视为未验证,并使用仓库配置的测试命令。对于部分匹配的请求,应查看按文件和测试名称的诊断信息,而不是反复检查相同的路径。
示例(概念性):在 src/vs/editor/test/common/model.test.ts 中运行测试,并使用测试名称过滤 "should split lines"。
回退:Shell 脚本
当 runTests 工具不可用时(例如在 CLI 环境中),从仓库根目录使用与平台对应的脚本:
- macOS / Linux:./scripts/test.sh [options]
- Windows:.\scripts\test.bat [options]
这些脚本会在需要时下载 Electron,并启动 Mocha 测试运行器。
使用方式
常用选项
裸文件路径 —— 运行来自特定文件的测试
将源文件路径直接作为位置参数传入。测试运行器会自动将裸的 .ts/.js 位置参数视为 --run 值。
./scripts/test.sh src/vs/editor/test/common/model.test.ts
.\scripts\test.bat src\vs\editor\test\common\model.test.ts
多个文件:
./scripts/test.sh src/vs/editor/test/common/model.test.ts src/vs/editor/test/common/range.test.ts
--run <file> —— 运行来自特定文件的测试(显式形式)
接受以 src/ 开头的源文件路径。运行器会自动去掉 src/ 前缀和 .ts/.js 扩展名,以解析编译后的模块。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts
可以通过重复 --run 来指定多个文件:
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --run src/vs/editor/test/common/range.test.ts
--grep <pattern>(别名:-g、-f)—— 按名称过滤测试
只运行完整标题匹配该模式的测试(传递给 Mocha 的 --grep)。
./scripts/test.sh --grep "should split lines"
与 --run 组合,以过滤特定文件内的测试:
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --grep "should split lines"
--runGlob <pattern>(别名:--glob、--runGrep)—— 运行匹配 glob 的测试
针对编译输出目录运行所有匹配 glob 模式的测试文件。适用于运行某个功能区域下的所有测试。
./scripts/test.sh --runGlob "**/editor/test/**/*.test.js"
注意:该 glob 针对输出目录中编译后的 .js 文件运行,而不是源 .ts 文件。
--coverage —— 生成覆盖率报告
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --coverage
--timeout <ms> —— 设置测试超时
为长时间运行的测试覆盖默认的 Mocha 超时。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --timeout 10000
适用场景
- 在 VS Code 仓库中运行单元测试。
- 按文件、测试名称或 glob 过滤要运行的测试。
- 收集测试覆盖率。
- 为长时间运行的测试调整超时。
限制
集成测试
集成测试(以 .integrationTest.ts 结尾或位于 extensions/ 中的文件)不由 scripts/test.sh 运行。应改用 scripts/test-integration.sh(或 scripts/test-integration.bat)。详见 integration-tests 技能。
编译要求
测试针对编译后的 JavaScript 输出运行。当存在 VS Code - Build 任务时,复用其当前输出;否则在运行测试前使用 npm run build-fast -- --client-only 刷新客户端输出。这支持冷构建和增量构建,无需持久监视器或扩展构建。当还需要扩展和 Copilot 输出时,使用 npm run build-fast。快速构建执行转译而非类型检查,因此当变更需要时,应运行适当的显式类型检查。当输入未变化时,不要在测试选择之间重新构建。由陈旧输出导致的测试失败是常见陷阱。