使用 Vitest 进行 TypeScript 测试

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Vitest,为什么需要它?

Vitest 是一个面向 Vite 和 TypeScript 生态系统的现代单元测试库。它被设计为 Jest 的快速替代品,但无需额外配置即可“开箱即用”地完全支持 TypeScript。Vitest 使用原生 TypeScript 解析器和 Vite 的模块系统,即使在大型项目中也能实现即时测试。

安装

通过 npm 将 Vitest 安装到您的 TypeScript 项目中:

npm install -D vitest

另外,如果您使用 React 或 Vue,请安装相关的工具库:

npm install -D @testing-library/react @testing-library/jest-dom

主要功能

  • 速度:测试使用工作线程并行运行,执行速度比 Jest 快 10 倍。
  • TypeScript 兼容性:无需 ts-jest 或 babel —— 直接处理 .ts 和 .tsx 文件。
  • 内置模拟和间谍函数:vi.mock、vi.spyOn 和 vi.fn 函数用于代码隔离。
  • 快照测试:能够保存和比较组件或数据的快照。
  • 覆盖率:内置支持 c8 或 istanbul,用于生成代码覆盖率报告。

TypeScript 代码示例

为一个简单的加法函数编写测试:

// math.tsexport function add(a: number, b: number): number {  return a + b;}

// math.test.tsimport { describe, it, expect } from 'vitest';import { add } from './math';

describe('add function', () => { it('should add two positive numbers', () => { expect(add(2, 3)).toBe(5); });

it('should handle negative numbers', () => { expect(add(-1, 1)).toBe(0); });

it('should return zero for zero arguments', () => { expect(add(0, 0)).toBe(0); });});

运行测试:

npx vitest

Vitest 会自动查找所有扩展名为 .test.ts 或 .spec.ts 的文件。

何时使用

Vitest 非常适合以下场景:

  • 基于 Vite 的新项目:无需配置即可即时集成。
  • 从 Jest 迁移:Vitest 具有相似的 API,简化了过渡过程。
  • 测试 TypeScript 库:完全支持装饰器、泛型和复杂类型。
  • CI/CD 流水线:高速执行可节省自动构建中的时间。

如果您的项目需要旧版本的 Node.js(低于 14),或者您使用与 Vite 不兼容的特定 Jest 插件,请避免使用 Vitest。

结论

Vitest 是一个现代、快速且对 TypeScript 友好的测试工具。它消除了 Jest 的许多缺点,例如启动缓慢和 TypeScript 配置复杂。如果您使用 TypeScript 并重视开发速度,Vitest 将是一个绝佳的选择。

推荐