本文档概述了 code-server 项目中使用的测试基础设施。它涵盖了为确保代码质量和功能而采用的测试框架、架构和方法。有关 CI/CD 流水线的信息,请参阅CI/CD 流水线。
code-server 项目采用全面的测试方法,包括
此测试基础设施旨在验证 code-server 能否正确启动、正确地对用户进行身份验证,并在浏览器环境中提供预期的 VS Code 体验。
来源: test/package.json1-31 test/playwright.config.ts1-44
来源: test/package.json1-31 test/e2e/models/CodeServer.ts1-10 test/e2e/baseFixture.ts1-65
测试基础设施依赖于几个关键的依赖项
| 依赖项 | 目的 |
|---|---|
| @playwright/test | E2E 测试框架 |
| jest | 单元测试框架 |
| supertest | HTTP 请求测试 |
| jsdom | 用于测试的 DOM 模拟 |
| node-fetch | 在测试中发起 HTTP 请求 |
| ts-jest | Jest 的 TypeScript 支持 |
E2E 测试基础设施围绕核心模型构建,该模型在测试期间生成和管理 code-server 实例。
来源: test/e2e/models/CodeServer.ts34-260 test/e2e/baseFixture.ts11-38
CodeServer 类负责生成和管理 code-server 实例。主要功能包括
来源: test/e2e/models/CodeServer.ts37-260
CodeServerPage 类实现了页面对象模型模式,用于通过 Playwright 与 code-server UI 进行交互。它提供了以下方法
来源: test/e2e/models/CodeServer.ts262-598
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
测试基础设施使用建立在 Playwright 测试套件之上的自定义套件系统。
套件系统提供
describe 函数,该函数会创建一个带有指定参数的 code-server 实例test 函数,该函数扩展了 Playwright 的测试,增加了 code-server 特定的套件来源: test/e2e/baseFixture.ts1-65
Playwright 配置在 test/playwright.config.ts 中定义,并指定了
来源: test/playwright.config.ts1-44
ci/dev/test-e2e.sh 脚本提供了运行 E2E 测试的入口点,执行以下关键步骤
测试使用 test/utils/constants.ts 中定义的通用常量
| 常量 | 目的 |
|---|---|
| PASSWORD | 默认测试密码 |
| workspaceDir | 测试工作区的基本目录 |
| REVERSE_PROXY_BASE_PATH | 反向代理测试的基础路径 |
| REVERSE_PROXY_PORT | 反向代理测试的端口 |
来源: test/utils/constants.ts1-5
登录测试套件验证了身份验证系统的各个方面
来源: test/e2e/login.test.ts1-61
终端测试验证
code-server 命令打开文件的能力来源: test/e2e/terminal.test.ts1-54
扩展测试验证
来源: test/e2e/extensions.test.ts1-37
postinstall.sh 脚本通过以下方式配置测试环境
要为 code-server 编写新测试,请执行以下操作:
test/e2e 目录中创建一个新的 .test.ts 文件。import { describe, test, expect } from "./baseFixture" 导入基础测试固定装置。describe 函数定义测试套件。test 函数和 codeServerPage 固定装置编写单个测试。CodeServerPage 方法与 UI 进行交互。示例结构