菜单

测试基础设施

相关源文件

本文档概述了 code-server 项目中使用的测试基础设施。它涵盖了为确保代码质量和功能而采用的测试框架、架构和方法。有关 CI/CD 流水线的信息,请参阅CI/CD 流水线

1. 概述

code-server 项目采用全面的测试方法,包括

  • 使用 Playwright 进行端到端 (E2E) 测试
  • 使用 Jest 进行单元测试
  • 使用 Supertest 对 HTTP 端点进行集成测试

此测试基础设施旨在验证 code-server 能否正确启动、正确地对用户进行身份验证,并在浏览器环境中提供预期的 VS Code 体验。

来源: test/package.json1-31 test/playwright.config.ts1-44

2. 测试框架组件

来源: test/package.json1-31 test/e2e/models/CodeServer.ts1-10 test/e2e/baseFixture.ts1-65

3. 测试依赖项

测试基础设施依赖于几个关键的依赖项

依赖项目的
@playwright/testE2E 测试框架
jest单元测试框架
supertestHTTP 请求测试
jsdom用于测试的 DOM 模拟
node-fetch在测试中发起 HTTP 请求
ts-jestJest 的 TypeScript 支持

来源: test/package.json4-21

4. E2E 测试架构

E2E 测试基础设施围绕核心模型构建,该模型在测试期间生成和管理 code-server 实例。

来源: test/e2e/models/CodeServer.ts34-260 test/e2e/baseFixture.ts11-38

4.1. CodeServer 类

CodeServer 类负责生成和管理 code-server 实例。主要功能包括

  • 使用可自定义的参数和环境变量生成 code-server
  • 为测试创建临时工作区
  • 提供与运行实例交互以执行命令的接口
  • 管理 code-server 进程的生命周期

来源: test/e2e/models/CodeServer.ts37-260

4.2. CodeServerPage 类

CodeServerPage 类实现了页面对象模型模式,用于通过 Playwright 与 code-server UI 进行交互。它提供了以下方法

  • 导航到 code-server 中的不同端点
  • 检查编辑器是否可见
  • 与集成终端交互
  • 通过 UI 打开文件和执行命令
  • 导航菜单和对话框

来源: test/e2e/models/CodeServer.ts262-598

5. 测试组织

E2E 测试被组织到集中的测试文件中,这些文件针对特定的功能

测试文件目的
login.test.ts测试身份验证功能
logout.test.ts测试用户注销流程
terminal.test.ts测试集成终端
openHelpAbout.test.ts测试“帮助”>“关于”对话框
codeServer.test.ts测试核心 code-server 功能
extensions.test.ts测试扩展加载和功能

来源: test/e2e/login.test.ts1-61 test/e2e/terminal.test.ts1-54 test/e2e/codeServer.test.ts1-45 test/e2e/extensions.test.ts1-37

6. 测试套件系统

测试基础设施使用建立在 Playwright 测试套件之上的自定义套件系统。

套件系统提供

  1. 一个 describe 函数,该函数会创建一个带有指定参数的 code-server 实例
  2. 一个 test 函数,该函数扩展了 Playwright 的测试,增加了 code-server 特定的套件
  3. 自动导航和设置 code-server 页面
  4. 测试完成后清理资源

来源: test/e2e/baseFixture.ts1-65

7. 运行测试

7.1. Playwright 配置

Playwright 配置在 test/playwright.config.ts 中定义,并指定了

  • 测试目录位置
  • 超时设置
  • 重试策略
  • 浏览器配置
  • 全局设置要求

来源: test/playwright.config.ts1-44

7.2. E2E 测试脚本

ci/dev/test-e2e.sh 脚本提供了运行 E2E 测试的入口点,执行以下关键步骤

  1. 构建测试扩展
  2. 验证 code-server 构建是否存在
  3. 运行 Playwright 测试

来源: ci/dev/test-e2e.sh1-51

7.3. 通用测试参数

测试使用 test/utils/constants.ts 中定义的通用常量

常量目的
PASSWORD默认测试密码
workspaceDir测试工作区的基本目录
REVERSE_PROXY_BASE_PATH反向代理测试的基础路径
REVERSE_PROXY_PORT反向代理测试的端口

来源: test/utils/constants.ts1-5

8. 测试用例示例

8.1. 身份验证测试

登录测试套件验证了身份验证系统的各个方面

  • 基本登录功能
  • 错误凭据的错误处理
  • 登录失败尝试的速率限制

来源: test/e2e/login.test.ts1-61

8.2. 终端测试

终端测试验证

  • 终端中的环境变量访问
  • 调用 code-server 命令打开文件的能力
  • 终端焦点和交互

来源: test/e2e/terminal.test.ts1-54

8.3. 扩展测试

扩展测试验证

  • 扩展加载
  • 访问代理 URI
  • 在不同配置选项下的扩展功能

来源: test/e2e/extensions.test.ts1-37

9. 测试设置和依赖项

postinstall.sh 脚本通过以下方式配置测试环境

  1. 安装测试目录的依赖项
  2. 安装测试扩展的依赖项
  3. 根据需要安装 VS Code 依赖项

来源: ci/dev/postinstall.sh1-39

10. 编写新测试

要为 code-server 编写新测试,请执行以下操作:

  1. test/e2e 目录中创建一个新的 .test.ts 文件。
  2. 使用 import { describe, test, expect } from "./baseFixture" 导入基础测试固定装置。
  3. 使用具有适当 code-server 参数的 describe 函数定义测试套件。
  4. 使用 test 函数和 codeServerPage 固定装置编写单个测试。
  5. 使用 CodeServerPage 方法与 UI 进行交互。
  6. 使用 Playwright 的断言来验证预期行为。

示例结构

来源: test/e2e/login.test.ts1-61 test/e2e/baseFixture.ts11-38