菜单

测试工具

相关源文件

TypeScript 测试平台提供了一个用于测试 TypeScript 编译器、语言服务和其他组件的基础设施。它实现了一个框架,用于定义、发现和执行测试,并提供了用于模拟文件系统、并行运行测试和生成测试结果基线文件的实用程序。

本文档解释了测试平台基础设施的架构和关键组件,重点介绍了测试的定义、发现和执行方式。

架构概述

测试平台由几个主要组件组成,它们协同工作,为 TypeScript 提供了一个灵活的测试平台。

来源

IO 系统

IO 系统抽象了文件系统操作,为测试中使用的真实和虚拟文件系统操作提供了统一的接口。这种抽象允许测试在不同的环境和操作系统中一致地运行。

来源

IO 系统默认实现为基于 Node.js 的实现,与真实文件系统交互。该接口还支持虚拟文件系统 (VFS),用于需要使用隔离文件系统运行的测试。

测试运行器架构

测试平台使用一系列 runner 来组织和执行不同类型的测试。

来源

每种 runner 类型负责

  1. 发现其特定类型的测试文件
  2. 使用正确的编译器选项和配置初始化测试
  3. 执行测试并收集结果

主要的 runner 类型是

  • CompilerBaselineRunner:执行编译器一致性和回归测试
  • FourSlashRunner:使用 fourslash 语法运行交互式编辑器测试
  • ProjectRunner:测试项目级别的 TypeScript 功能
  • TranspileRunner:测试 TypeScript 转译器

测试执行流程

TypeScript 测试平台中的测试遵循从发现到结果报告的特定执行流程。

来源

执行流程始于加载测试配置,这些配置决定了使用哪些 runner 以及如何执行测试。一旦创建了 runner,它们就会发现并初始化测试。测试可以按顺序或并行执行,并在最后收集和报告结果。

并行测试执行

测试平台支持并行测试执行以提高性能,尤其是在大型测试套件中。

来源

并行测试执行系统包括:

  1. 一个发现和分发测试的主机进程
  2. 多个执行测试和报告结果的工作进程
  3. 主机和工作进程之间的基于 IPC 的通信
  4. 基于先前运行的性能数据的智能测试批处理
  5. 进度报告和可视化

模拟实现

测试平台提供 TypeScript 编译器关键依赖项的模拟实现,以实现隔离测试。

来源

模拟实现包括:

  1. System:实现 ts.System 接口,带有虚拟文件系统
  2. CompilerHost:一个用于测试 TypeScript 编译器的模拟编译器主机
  3. ParseConfigHost:用于测试配置文件解析

这些模拟允许测试:

  • 在不影响真实文件系统的情况下运行
  • 控制测试执行的环境
  • 测试错误条件和边缘情况

测试配置

测试平台支持灵活的配置系统来控制测试的发现和执行方式。

配置选项描述默认
light以轻量级模式运行(断言较少)false
taskConfigsFolder任务配置文件所在文件夹-
workerCount并行工作进程数量1
stackTraceLimit堆栈跟踪限制-
test / runners要使用的特定测试 runner所有 runner
runUnitTests是否运行单元测试true
skipSysTests跳过系统测试false
noColors禁用彩色输出false
timeout测试的全局超时-
keepFailed在测试列表中保留失败的测试false
shardId / shards用于测试分片1/1

来源

配置可以通过以下方式指定:

  1. 命令行参数
  2. 一个 mytest.config 文件(优先级最高)
  3. 一个 test.config 文件
  4. 默认值

错误基线

测试平台包含一个复杂的系统,用于生成错误基线,用于验证编译器错误是否保持一致。

来源

错误基线系统

  1. 捕获编译期间产生的所有诊断信息
  2. 以一致、可读的格式对其进行格式化
  3. 将其与存储的基线文件进行比较
  4. 在被请求时更新基线

这种方法允许 TypeScript 保持错误消息的向后兼容性,并确保错误报告的更改是故意的。

编译器实用程序

测试平台提供在测试中使用 TypeScript 编译器的实用程序。

来源

编译器实用程序包括:

  1. WriterAggregator:用于收集编译器输出行
  2. compileFiles:一个用于使用特定选项编译测试文件的函数
  3. getSourceFile:用于为测试创建和管理源文件的函数
  4. 用于处理默认库文件的实用程序

这些实用程序简化了对编译器功能编写测试的过程,并确保了测试行为的一致性。

虚拟文件系统

测试平台包含一个虚拟文件系统 (VFS),允许测试在隔离的环境中运行。

来源

虚拟文件系统

  1. 模仿真实文件系统的 API 和行为
  2. 允许测试读取、写入和操作文件,而不会影响真实文件系统
  3. 支持区分大小写和不区分大小写模式
  4. 可以对其进行遮蔽和分层以支持不同的测试场景

这个虚拟文件系统是测试平台能够在不同环境中一致运行测试的关键。

结论

TypeScript 测试平台提供了一个强大而灵活的框架,用于测试 TypeScript 编译器和相关组件。其架构支持从单元测试到端到端编译器测试的各种测试类型,并具备并行执行、基线比较和隔离测试环境等功能。

理解测试平台对于为 TypeScript 做贡献至关重要,因为它使开发人员能够编写有效的测试并理解现有测试的工作原理。