CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/Vitest 测试
RawBlame
课时目录12 节

Node.js 框架与 ORM

  1. 01Node 框架生态
  2. 02Fastify
  3. 03Hono
  4. 04fetch 与 HTTP 客户端
  5. 05Drizzle ORM
  6. 06Knex 查询构建
  7. 07Sequelize
  8. 08模板引擎
  9. 09Vitest 测试
  10. 10日志
  11. 11生产运行
  12. 12综合练习

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

VitestJest
ESM一等公民需额外配置
速度通常更快大仓可能慢
APIdescribe/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)

小结

Vitest + inject = Node API 单测的默认组合。 下一课日志:可观测性的入口。

加载本节练习…
← 上一课模板引擎下一课 →日志