Skip to content

参考

基于 Vitest v4.1.x 编写

速查

  • 单次跑:vitest run;watch:vitest;覆盖率:vitest run --coverage;面板:vitest --ui
  • 过滤:-t "名"(测试名)、文件名--changed--project 名
  • 完整说明见 入门 / 配置 / 测试 API / 断言 / 模拟

CLI 命令

命令说明
vitestwatch 模式(默认)
vitest run单次执行,CI 用
vitest --ui启动可视化 UI(需 @vitest/ui
vitest run --coverage生成覆盖率报告
vitest -t "<正则>"按测试名过滤
vitest <文件路径>按文件名过滤
vitest --changed只跑改动相关的测试
vitest related <源文件>只跑依赖该源文件的测试
vitest run --shard=1/3分片,多机并行 CI
vitest list列出匹配的测试但不执行
vitest run --bail=<n>失败 n 个后停止
vitest run --reporter=<r>指定 reporter(verbose / json …)
vitest --project <name>只跑指定 project
vitest --inspect-brk开 Node 调试,断点在首行
vitest bench跑基准测试(bench

常用配置项(test.*

配置默认说明
environment"node"node / jsdom / happy-dom / edge-runtime
globalsfalse注入全局 test / expect
setupFiles[]每个测试文件前运行
globalSetup[]整进程启动 / 结束各一次
include["**/*.{test,spec}.?(c|m)[jt]s?(x)"]测试文件匹配
clearMocksfalse每测试后 .mockClear()
resetMocksfalse每测试后 .mockReset()
restoreMocksfalse每测试后 .mockRestore()
testTimeout5000单测试超时(ms)
hookTimeout10000钩子超时
retry0失败重试次数
isolatetrue文件级模块隔离
projects多项目配置(取代 workspace
coverage.provider"v8"v8 / istanbul

vi.* API

API用途
vi.fn(impl?)造 mock 函数
vi.spyOn(obj, key)监视已有方法
vi.mock(path, factory?)模块 mock(提升)
vi.doMock(path, factory?)模块 mock(不提升,配动态 import)
vi.hoisted(fn)把变量提升到 mock 之前
vi.mocked(fn, opts?)类型安全包装
vi.importActual(path)取原始模块(异步)
vi.stubGlobal(name, val)替换全局变量
vi.stubEnv(key, val)替换环境变量
vi.useFakeTimers()启用假定时器
vi.advanceTimersByTime(ms)推进定时器
vi.setSystemTime(date)固定系统时间
vi.waitFor(fn, opts?)轮询重试直到成功
vi.clearAllMocks()批量清理 / 重置 / 恢复

常用 expect matchers

matcher用途
toBe / toEqual / toStrictEqual相等(引用 / 深 / 严格)
toBeNull / toBeUndefined / toBeDefined空值判断
toBeTruthy / toBeFalsy真假
toBeGreaterThan / toBeCloseTo数字比较
toContain / toHaveLength / toHaveProperty包含 / 长度 / 属性
toThrowError抛错
resolves / rejectsPromise(记得 await
toHaveBeenCalledWith / toHaveBeenCalledTimesmock 调用断言
expect.objectContaining非对称匹配
expect.soft累积断言

官方资源