SuperAPI AI 工具集

unit-tests

测试与质量

查看项目

更新于 10-15 14:43

技能介绍

用途

该技能用于在 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。快速构建执行转译而非类型检查,因此当变更需要时,应运行适当的显式类型检查。当输入未变化时,不要在测试选择之间重新构建。由陈旧输出导致的测试失败是常见陷阱。