Vitest 测试
vitest、jest 在 Node 中。
30 分钟
Vitest 测试
Node 服务不能只有 curl。Vitest 基于 Vite,启动快、ESM 友好,API 与 Jest 高度相似;在 TS + Fastify 项目里已是主流选择之一。
学习目标
- 用 Vitest 测 Fastify 路由(注入请求,不启真实端口)
- 对比 Jest 在 Node 项目中的配置差异
- 衔接 testing-essentials 的断言与 mock 纪律
安装与脚本
{
"scripts": {
"test": "vitest run",
"test:watch": "vitest"
},
"devDependencies": {
"vitest": "^3.0.0"
}
}
Vitest 原生 ESM;若项目仍 CommonJS,可对照 nodejs-essentials 的 node --test。
测 Fastify 路由
import { describe, it, expect, beforeAll, afterAll } from "vitest";
import { buildApp } from "../src/app.js";
describe("GET /health", () => {
let app;
beforeAll(async () => {
app = await buildApp();
await app.ready();
});
afterAll(async () => app.close());
it("returns ok", async () => {
const res = await app.inject({ method: "GET", url: "/health" });
expect(res.statusCode).toBe(200);
expect(res.json()).toEqual({ ok: true });
});
});
inject 走内存管道,快且稳定;集成测再启真实端口或 Testcontainers。
Vitest vs Jest
| Vitest | Jest | |
|---|---|---|
| ESM | 一等公民 | 需额外配置 |
| 速度 | 通常更快 | 大仓可能慢 |
| API | describe/it/expect | 相同为主 |
| 生态 | Vite/前端 monorepo | 历史存量多 |
团队已全 Jest 可继续;新 TS 服务推荐 Vitest。Mock 外部 HTTP 时用 vi.mock 或 MSW,原则与 test-mockito 相同:只 mock 边界。
练习
- 为 Fastify
/api/tracks写 200 与 404 两则用例 - 配置
vitest.config覆盖src/**/*.test.js - CI 里跑
npm test(可对 github-actions-essentials)