关于 unit-tests
unit-tests 是指导在 VS Code 仓库中运行单元测试的开发技能,面向需要按文件或名称筛选测试的开发者。它说明了优先使用结构化测试工具的方式,以及不可用时的脚本、覆盖率和编译要求。
主要功能
- 01按文件或测试名称筛选
- 02通过 runTests 收集覆盖率
- 03提供脚本运行测试的备用方法
- 04支持 glob、超时和并行选项
- 05说明编译输出与集成测试要求
适用场景
- 01运行指定测试文件或测试名称
- 02在工具不可用时通过脚本执行测试
- 03收集覆盖率或并行运行完整测试集
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ microsoft/ vscode --skill unit-tests安装后在 Claude Code 中输入/unit-tests确认已加载。
详细介绍
运行单元测试
首选:使用 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
--workers <count>——在并行进程中运行所有测试文件
将所有测试文件分配到 <count> 个工作进程中运行。必须指定数量,且数量上限为每个 CPU 核心和每 2 GB 内存各一个工作进程,因为每个工作进程都会加载所有测试文件。每个工作进程都会加载所有测试文件,并按常规顺序运行分配给自己的文件。如果使用 --run、--runList、--runGlob、裸文件路径、--grep、--coverage 或 --dev,则会忽略该选项,并使用单个窗口或进程运行。使用 --rerun-failed-files 时,所有工作进程中的失败测试都会在单个窗口或进程中重新运行。如果某个工作进程失败,运行器会按顺序打印其运行过的测试文件,以便传入 --run 重现失败。npm run test-node 和 npm run test-browser 也接受此选项;浏览器运行器会在每个工作进程中启动自己的浏览器,逐个运行浏览器,并在使用 --debug 时忽略该选项。
./scripts/test.sh --workers 4
npm run test-node -- --workers 4
npm run test-browser -- --browser chromium --workers 4
集成测试
scripts/test.sh 不会运行集成测试(文件名以 .integrationTest.ts 结尾或位于 extensions/ 中的测试)。请改用 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。快速构建会进行转译,而不执行类型检查,因此如有必要,请根据更改内容运行相应的显式类型检查。如果输入未发生变化,则在不同测试选择之间不要重新构建。由过时输出导致测试失败是常见问题。