vitest for TypeScript:完整指南
vitest 是一个现代、快速且强大的单元测试框架,专为 TypeScript 和 JavaScript 生态系统设计。它作为 Jest 的直接替代品而诞生,但更注重执行速度和对 Vite 的原生支持。如果你使用 Vite 构建项目,vitest 将是理想选择,因为它使用与主构建工具相同的插件和配置。
为什么需要 vitest?首先,它通过使用 esbuild 进行转译并原生支持 ESM(ECMAScript 模块),速度极快。其次,它提供与 Jest 兼容的丰富 API,简化了迁移过程。第三,vitest 内置支持 TypeScript、JSX、模拟(mocking)、覆盖率(coverage)和快照测试(snapshot testing),无需安装额外包。这使其成为小型项目和大型企业级应用的理想工具。
在本 PythonLib 教育网站上,我们将展示如何使用 vitest 测试 TypeScript 代码。你将学习如何安装该库、编写第一个测试、掌握核心方法并避免常见错误。到文章结尾,你将能够在自己的项目中自信地使用 vitest。
安装
通过 npm 或 yarn 安装 vitest。对于 TypeScript 项目,你还需要安装 TypeScript 本身以及 Node.js 的类型定义(如果测试服务器端代码)。
npm install -D vitest typescript @types/node
如果使用 yarn:
yarn add -D vitest typescript @types/node
安装后,在 package.json 中添加脚本:
{
"scripts": {
"test": "vitest",
"test:run": "vitest run"
}
}
vitest 命令以监视模式运行测试(文件变更时自动重新运行),而 vitest run 则单次运行所有测试。
快速上手
创建一个 sum.ts 文件,包含一个简单函数:
// sum.ts
export function sum(a: number, b: number): number {
return a + b;
}
现在创建测试文件 sum.test.ts:
// sum.test.ts
import { describe, it, expect } from 'vitest';
import { sum } from './sum';
describe('sum 函数', () => {
it('应正确相加两个数字', () => {
expect(sum(2, 3)).toBe(5);
});
it('应处理负数', () => {
expect(sum(-1, -2)).toBe(-3);
});
});
运行测试:
npm run test
你将看到绿色输出,显示测试通过。恭喜,你已编写了第一个 vitest 测试!
核心方法与函数
vitest 提供了丰富的 API 用于编写测试。以下是 8 个关键方法及其描述和示例。
1. describe
签名: describe(name: string, fn: () => void): void
描述: 将相关测试分组到一个块中。提高可读性,并允许对组应用钩子(beforeEach、afterEach)。
import { describe, it, expect } from 'vitest';
describe('数学运算', () => {
it('应能相加', () => {
expect(1 + 1).toBe(2);
});
it('应能相减', () => {
expect(5 - 3).toBe(2);
});
});
2. it / test
签名: it(name: string, fn: () => void | Promise<void>, timeout?: number): void
描述: 定义一个单独的测试用例。可以使用 it 或 test,两者是同义词。
import { it, expect } from 'vitest';
it('应返回 true