本文档全面概述了 GitHub Readme Stats 中实现的测试框架。该测试系统通过自动化测试套件,确保了代码库的可靠性和可维护性,这些测试套件验证了卡片渲染、数据获取和其他核心功能的正确行为。有关设置开发环境的信息,请参阅开发环境设置。
GitHub Readme Stats 项目采用多层测试方法,在不同抽象级别上验证其组件的功能。
来源: package.json22-26 .github/workflows/test.yml12-47 .husky/pre-commit1-3
单元测试用于隔离验证单个组件和函数的正确行为。这些测试侧重于特定的逻辑和边缘情况。
单元测试验证
来自 calculateRank.test.js 的示例测试
来源: tests/calculateRank.test.js5-19 tests/fetchRepo.test.js41-105
端到端测试通过将本地生成的卡片与已部署的 Vercel 预览生成的卡片进行比较来验证整个系统。
E2E 测试
来源: tests/e2e/e2e.test.js1-225 package.json25
基准测试用于衡量关键操作的性能,以确保系统保持高效。
来源: package.json34 .github/workflows/test.yml38-40
该项目使用 Jest 作为其主要测试框架,配置如下:
关键配置点
来源: jest.config.js1-12 package.json22-34
该项目提供了几个 npm 脚本来运行不同类型的测试
| 脚本 | 目的 | 命令 |
|---|---|---|
test | 运行所有单元测试并包含覆盖率 | node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage |
test:watch | 在监视模式下运行测试 | node --experimental-vm-modules node_modules/jest/bin/jest.js --watch |
test:update:snapshot | 更新测试快照 | node --experimental-vm-modules node_modules/jest/bin/jest.js -u |
test:e2e | 运行端到端测试 | node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.e2e.config.js |
bench | 运行基准测试 | node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.bench.config.js |
GitHub Readme Stats 使用 GitHub Actions 工作流在每次推送到 master 分支和拉取请求时自动运行测试。
工作流
来源: .github/workflows/test.yml1-47
该项目使用 Husky 来实现提交前钩子,在允许提交之前运行测试和 linting。
这确保所有提交的代码都通过测试并符合编码标准。
来源: .husky/pre-commit1-3 package.json32-33 package.json71-73
单元测试遵循以下通用模式
describe 和 it/test 定义测试用例关于 fetchRepo 函数的单元测试示例
来源: tests/fetchRepo.test.js41-51 tests/calculateRank.test.js5-19
E2E 测试用于验证已部署的 API 端点的功能
统计卡片的 E2E 测试示例
来源: tests/e2e/e2e.test.js115-135
该项目使用 Jest 的内置覆盖率报告和 Codecov 来跟踪测试覆盖率。
覆盖率指标有助于识别
来源: .github/workflows/test.yml46-47 package.json22
几个质量门确保代码的可靠性
来源: .husky/pre-commit1-3 .github/workflows/test.yml1-47
开发人员可以使用以下命令在本地运行测试
| 命令 | 目的 |
|---|---|
npm test | 运行所有单元测试并包含覆盖率 |
npm run test:watch | 在 watch 模式下运行测试(开发过程中很有用) |
npm run test:e2e | 运行端到端测试(需要设置环境) |
npm run bench | 运行基准测试 |
注意:E2E 测试需要在 .env 文件中设置 VERCEL_PREVIEW_URL 环境变量。
来源: package.json22-34 tests/e2e/e2e.test.js4-5 tests/e2e/e2e.test.js110-113
GitHub Readme Stats 中的测试系统提供了跨多个级别的全面功能验证。通过将单元测试、端到端测试和基准测试与自动化 CI/CD 集成相结合,该项目在支持持续开发的同时,保持了高质量和可靠性。