测试

测试的意义

一、提前发现不符合预期的变化

如果我们的改动会导致pipeline输出结果变化, 通过快照可以轻松的捕捉到每一行代码对最终结果的影响, 可以轻松提前发现不符合预期的变化

二、大型重构的基石

反之, 如果确定代码不会改变pipeline的输出结果, 例如一个大型重构, 就可以安心的进行大刀阔斧的调整代码逻辑, 每一个测试用例都是大型重构的基石

TIP

鼓励用多个小的commit, 代替一个大的commit, 否则快照变化会庞大到无法review

测试分类

VSeed 的测试分为两类:

单元测试(Unit Tests)

位于 packages/vseed/tests/unit/ 目录下,针对独立函数、工具类、管道函数等进行单元级别的测试。

特点:

  • 测试粒度细,专注单一功能
  • 运行速度快
  • 无需依赖完整的 VSeed 配置
  • 易于定位问题

运行命令:

1# 运行所有单元测试
2pnpm test:unit
3
4# 运行单元测试并生成覆盖率报告
5pnpm test:unit:coverage

集成测试(Integration Tests)

位于 packages/vseed/tests/integration 目录下,基于完整的 VSeed 配置进行端到端测试。

特点:

  • 测试完整的数据流转和图表生成
  • 通过快照验证最终输出
  • 覆盖真实使用场景

运行命令:

1# 运行所有集成测试
2pnpm test:integration
3
4# 运行集成测试并更新快照
5pnpm test:integration:update
6
7# 运行集成测试并生成覆盖率报告
8pnpm test:integration:coverage

集成测试用例

在目录packages/vseed/tests/integration内包含所有的集成测试用例

  • 每个用例是一个json文件, 包含一个完整的 vseed 配置
  • 每个json文件的文件名即为测试用例的名称
  • 每个 *.test.ts 文件均为自动生成, 请勿手动维护
  • 修改任何json文件, 请重新执行 pnpm run build:canvasTest
TIP

仅维护 json配置, 极大的提升测试用例的可维护性, 并降低测试用例的编写成本

单元测试用例

在目录 packages/vseed/tests/unit/ 内包含所有的单元测试用例

  • 每个测试文件手动编写,针对特定函数或模块
  • 测试文件命名为 *.test.ts
  • 使用 Vitest 测试框架
  • 专注于测试独立功能,不依赖完整配置

目录结构:

tests/unit/ ├── pipes/ # 管道函数测试 │ └── dual/ │ └── dualChartType.test.ts └── utils/ # 工具函数测试 ├── checkVSeed.test.ts ├── createFormatterByMeasure.test.ts ├── findFunctions.test.ts └── measures.test.ts

build:test

根据每一个vseed, 生成测试用例, 每个用例包含specadvancedVseed 的快照

source: scripts/build-tests.mjs
1pnpm run build:canvasTest

build:canvasTest

根据每一个vseed dsl, 生成测试用例, 每个用例包含specadvancedVseed 的快照, 并创建图表实例, 获得更高的测试覆盖率

spec 内存在一些回调函数, 创建图表实例, 才能触发回调函数

source: scripts/build-tests-with-canvas.mjs
1pnpm run build:canvasTest

测试覆盖率

运行测试并生成覆盖率报告后, 会自动生成覆盖率徽章到README.md文件, 并打开覆盖率报告页面

1# 所有测试的覆盖率
2pnpm test:coverage
3
4# 仅单元测试的覆盖率
5pnpm test:unit:coverage
6
7# 仅集成测试的覆盖率
8pnpm test:integration:coverage
  • HTML 报告: packages/vseed/coverage/index.html
  • JSON 数据: packages/vseed/coverage/coverage-summary.json
  • 徽章: README.md 文件顶部的覆盖率徽章
TIP

徽章使用 shields.io 动态生成,格式为:

source: scripts/build-coverage-badge.mjs
1https://img.shields.io/badge/Coverage-{percentage}%-{color}.svg

测试命令总览

命令说明
pnpm test运行所有测试(单元测试 + 集成测试)
pnpm test:unit仅运行单元测试
pnpm test:unit:coverage运行单元测试并生成覆盖率报告
pnpm test:integration仅运行集成测试
pnpm test:integration:update运行集成测试并更新快照
pnpm test:integration:coverage运行集成测试并生成覆盖率报告
pnpm test:update运行所有测试并更新快照
pnpm test:coverage运行所有测试并生成覆盖率报告