Skip to content
Vitest 0
Main Navigation 指南API配置高级
3.2.0
2.1.9
1.6.1
0.34.6

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

主题

Sidebar Navigation

指南

为什么选择 Vitest

快速开始

特性

工作区

命令行界面

测试筛选

代码覆盖率

快照(Snapshot)

模拟(Mocking)

类型测试

Vitest UI

浏览器模式(实验性)

源码内测试

测试上下文

测试环境

扩展匹配器

IDE 集成

调试

与其他测试运行器的比较

迁移指南

常见错误

API

测试 API 索引

Mock Functions

Vi

expect

expectTypeOf

assertType

配置

配置 Vitest

页面导航

配置 Vitest ​

配置 ​

vitest 会读取项目根目录下的 vite.config.ts 文件(如果存在),以匹配 Vite 应用的插件和配置。如果需要为测试使用不同的配置,或者你的主应用不依赖 Vite,你可以选择以下方式:

  • 创建 vitest.config.ts 文件,它的优先级高于 vite.config.ts,会覆盖其中的配置。
  • 将 --config 选项传递给 CLI,例如 vitest --config ./path/to/vitest.config.ts。
  • 使用 process.env.VITEST 或 defineConfig 中的 mode 属性(如果未被覆盖,将被设置为 test/benchmark),在 vite.config.ts 中根据条件应用不同的配置。

要配置 vitest 本身,请在你的 Vite 配置文件中添加 test 属性。如果你直接从 vite 导入 defineConfig,你需要在配置文件顶部使用 三斜线指令 引用 Vitest 的类型定义。

当使用从 vite 导入的 defineConfig 时,你应该这样做:

ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // ...
  },
});

如果从 vitest/config 导入 defineConfig,你应该这样做:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    // ...
  },
});

你可以获取 Vitest 的默认选项,以便在需要时扩展它们:

ts
import { configDefaults, defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    exclude: [...configDefaults.exclude, 'packages/template/*'],
  },
});

如果需要,你也可以从另一个配置文件扩展 Vite 的选项,例如在使用单独的 vitest.config.js 时:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default mergeConfig(
  viteConfig,
  defineConfig({
    test: {
      exclude: ['packages/template/*'],
    },
  })
);

WARNING

mergeConfig 辅助函数在 Vitest v0.30.0 及更高版本中可用。如果使用较低版本,可以直接从 vite 导入它。

如果你的 Vite 配置被定义为一个函数,你可以这样定义配置:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default defineConfig(configEnv =>
  mergeConfig(
    viteConfig(configEnv),
    defineConfig({
      test: {
        exclude: ['packages/template/*'],
      },
    })
  )
);

选项 ​

TIP

除了以下选项外,你还可以使用来自 Vite 的任何配置选项。例如,使用 define 定义全局变量,或使用 resolve.alias 定义别名。

TIP

所有在 工作区 项目配置中不支持的配置选项旁边都有 * 标记。

include ​

  • 类型: string[]
  • 默认值: ['**/*.{test,spec}.?(c|m)[jt]s?(x)']

使用 glob 模式指定要包含在测试运行中的文件。

exclude ​

  • 类型: string[]
  • 默认值: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*']

使用 glob 模式指定要从测试运行中排除的文件。

includeSource ​

  • 类型: string[]
  • 默认值: []

包含源文件中的测试文件的 glob 模式。

定义此项后,Vitest 将运行所有匹配的、包含 import.meta.vitest 的文件。

server ​

  • 类型: { sourcemap?, deps?, ... }
  • 版本: 自 Vitest 0.34.0 起

Vite-Node 服务器选项。

server.sourcemap ​

  • 类型: 'inline' | boolean
  • 默认值: 'inline'

向模块中注入内联 sourcemap。

server.debug ​

  • 类型: { dumpModules?, loadDumppedModules? }

Vite-Node 调试器选项。

server.debug.dumpModules ​

  • 类型: boolean | string

将转换后的模块转储到文件系统中。传递一个字符串将转储到指定的路径。

server.debug.loadDumppedModules ​

  • 类型: boolean

如果文件系统中存在已转储的模块,则直接读取。可以通过修改文件系统中转储的结果进行调试。

server.deps ​

  • 类型: { external?, inline?, ... }

依赖解析处理。

server.deps.external ​

  • 类型: (string | RegExp)[]
  • 默认值: [/\/node_modules\//]

外部化是指 Vite 将跳过对该包的处理,直接使用原生 Node.js。外部化的依赖项将不应用于 Vite 的转换器和解析器,因此它们不支持重新加载时的 HMR。默认情况下,node_modules 中的所有包都会被外部化。

这些选项支持 node_modules 中的包名称,也可以使用 deps.moduleDirectories 中指定的名称。例如,位于 packages/some-name 中的包 @company/some-name 应指定为 some-name,并且 packages 应包含在 deps.moduleDirectories 中。本质上,Vitest 总是检查文件路径,而不是实际的包名称。

如果使用正则表达式,Vitest 会在 文件路径 上调用它,而不是包名称。

server.deps.inline ​

  • 类型: (string | RegExp)[] | true
  • 默认值: []

Vite 将处理内联模块。这可能有助于处理以 ESM 格式发布 .js 文件的包(Node.js 无法处理)。

如果为 true,则所有依赖项都将被内联。默认情况下,ssr.noExternal 中指定的所有依赖项都将被内联。

server.deps.fallbackCJS ​

  • 类型 boolean
  • 默认值: false

当依赖项是有效的 ESM 包时,尝试根据路径推断 CJS 版本。如果依赖项的 ESM 文件配置有误,这可能会有帮助。

如果一个包在 ESM 和 CJS 模式下具有不同的逻辑,这可能会导致一些不一致。

server.deps.cacheDir ​

  • 类型 string
  • 默认值:'node_modules/.vite'

缓存文件的存储目录。

deps ​

  • 类型: { optimizer?, registerNodeLoader?, ... }

依赖解析处理。

deps.optimizer ​

  • 类型: { ssr?, web? }
  • 版本: 自 Vitest 0.34.0 起
  • 另请参阅: 依赖项优化选项

启用依赖优化。如果你有很多测试,这可能会提升它们的性能。在 Vitest 0.34.0 之前,它被命名为 deps.experimentalOptimizer。

当 Vitest 遇到 include 中列出的外部库时,会使用 esbuild 将它们打包成单个文件,并作为一个完整的模块导入。这有几个好处:

  • 导入包含大量导入的包的成本很高。通过打包为单一文件可节省大量时间
  • 导入 UI 库的成本很高,因为它们并非旨在在 Node.js 中运行
  • 你的 alias 配置现在在捆绑的包中受到尊重
  • 你的测试代码的运行方式将更接近在浏览器中的运行方式

请注意,只有在 deps.optimizer?.[mode].include 选项中的包会被打包(某些插件会自动填充此选项,例如 Svelte)。你可以在 Vite 文档中阅读有关可用选项的更多信息(Vitest 不支持 disable 和 noDiscovery 选项)。默认情况下,Vitest 对 jsdom 和 happy-dom 环境使用 optimizer.web,对 node 和 edge 环境使用 optimizer.ssr,但它可以通过 transformMode 进行配置。

此选项也会继承你的 optimizeDeps 配置(对于 web 环境,Vitest 会扩展 optimizeDeps,对于 ssr 环境,则扩展 ssr.optimizeDeps)。如果在 deps.optimizer 中重新定义 include/exclude 选项,它将在运行测试时扩展你的 optimizeDeps 配置。如果 include 中的相同选项在 exclude 中列出,Vitest 会自动删除它们。

TIP

你将无法编辑 node_modules 中的代码进行调试,因为这些代码实际上位于你的 cacheDir 或 test.cache.dir 目录中。如果你想使用 console.log 语句进行调试,请直接编辑代码或使用 deps.optimizer?.[mode].force 选项强制重新打包。

deps.optimizer.{mode}.enabled ​

  • 类型: boolean
  • 默认值: 如果使用 >= Vite 4.3.2,则为 true,否则为 false

启用依赖优化。

WARNING

此选项仅适用于 Vite 4.3.2 及更高版本。

deps.web ​

  • 类型: { transformAssets?, ... }
  • 版本: 自 Vite 0.34.2 起

当转换模式设置为 web 时,适用于外部文件的选项。默认情况下,jsdom 和 happy-dom 使用 web 模式,而 node 和 edge 环境使用 ssr 转换模式,因此这些选项对这些环境中的文件没有影响。

通常,node_modules 中的文件会被外部化,但这些选项也会影响 server.deps.external 中的文件。

deps.web.transformAssets ​

  • 类型: boolean
  • 默认值: true

Vitest 是否应该像 Vite 在浏览器中一样,处理资源文件(如 .png、.svg、.jpg 等)并解析它们。

如果没有指定查询,此模块将具有等于资源路径的默认导出。

WARNING

目前,此选项仅适用于 experimentalVmThreads 池。

deps.web.transformCss ​

  • 类型: boolean
  • 默认值: true

Vitest 是否应该像 Vite 在浏览器中一样,处理 CSS(.css、.scss、.sass 等)文件,并像 Vite 在浏览器中那样解析它们。

如果通过 css 选项禁用 CSS 文件,此选项只会阻止抛出 ERR_UNKNOWN_FILE_EXTENSION 错误。

WARNING

目前,此选项仅适用于 experimentalVmThreads 池。

deps.web.transformGlobPattern ​

  • 类型: RegExp | RegExp[]
  • 默认值: []

用于匹配应转换的外部文件的正则表达式模式。

默认情况下,node_modules 中的文件会被外部化,并且不会被转换,除非它是 CSS 或资源,并且相应的选项未被禁用。

WARNING

目前,此选项仅适用于 experimentalVmThreads 池。

deps.registerNodeLoader* ​

  • 类型: boolean
  • 默认值: false

使用 实验性 Node loader ,并采用 Vite 的解析算法来解析外部化文件中的导入。

如果禁用,你的 alias 和 <plugin>.resolveId 将不会影响外部化包(默认情况下为 node_modules)中的导入。

deps.interopDefault ​

  • 类型: boolean
  • 默认值: true

将 CommonJS 模块的 default 导出视为命名导出。某些依赖只打包了 CommonJS 模块,并且没有使用命名导出。当使用 import 语法(而不是 require)导入这些包时,Node.js 无法静态分析这些命名导出。在 Node 环境中使用命名导出导入此类依赖项时,您将看到此错误:

import { read } from 'fs-jetpack';
         ^^^^
SyntaxError: Named export 'read' not found. The requested module 'fs-jetpack' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export.

Vitest 不会进行静态分析,因此无法在代码运行前发现错误。如果禁用了此功能,你很可能在运行测试时才会看到以下错误:

TypeError: createAsyncThunk is not a function
TypeError: default is not a function

默认情况下,Vitest 假定你正在使用捆绑器来绕过此问题,并且不会失败,但如果你的代码未被处理,你可以手动禁用此行为。

deps.moduleDirectories ​

  • 类型: string[]
  • 默认值:['node_modules']

应视为模块目录的目录列表。此配置项会影响 vi.mock 的行为:当没有提供工厂函数,并且要模拟的模块路径与 moduleDirectories 中的某个值匹配时,Vitest 会尝试在项目根目录 下查找 __mocks__ 文件夹来解析 mock。

当外部化依赖项时,此选项还会影响文件是否应被视为模块。默认情况下,Vitest 使用原生 Node.js 导入外部模块,绕过 Vite 转换步骤。

设置此选项会 覆盖 默认值。如果你仍然希望在 node_modules 中搜索包,请将其包含在配置项中:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    deps: {
      moduleDirectories: ['node_modules', path.resolve('../../packages')],
    },
  },
});

runner ​

  • 类型:VitestRunnerConstructor
  • 默认值:运行测试时为 node,运行基准测试时为 benchmark

自定义测试运行器的路径。这是一个高级功能,应与自定义库运行器一起使用。你可以在 文档 中阅读有关它的更多信息。

benchmark ​

  • 类型: { include?, exclude?, ... }

运行 vitest bench 时使用的选项。

benchmark.include ​

  • 类型: string[]
  • 默认值: ['**/*.{bench,benchmark}.?(c|m)[jt]s?(x)']

基准测试文件的包含 glob 模式

benchmark.exclude ​

  • 类型: string[]
  • 默认值: ['node_modules', 'dist', '.idea', '.git', '.cache']

基准测试文件的排除 glob 模式

benchmark.includeSource ​

  • 类型: string[]
  • 默认值: []

用于指定内联基准测试文件的 glob 模式。此选项与 includeSource 类似。

当定义后,Vitest 将运行所有匹配的、包含 import.meta.vitest 的文件。

benchmark.reporters ​

  • 类型: Arrayable<BenchmarkBuiltinReporters | Reporter>
  • 默认值: 'default'

自定义输出报告器。可以包含一个或多个内置报告名称、报告器实例和/或自定义报告器的路径。

benchmark.outputFile ​

  • 类型: string | Record<string, string>

当同时指定 --reporter=json 选项时,将基准测试结果写入文件中。 通过提供对象而不是字符串,你可以在使用多个报告器时定义单独的输出。

要通过 CLI 命令提供对象,请使用以下语法:--outputFile.json=./path --outputFile.junit=./other-path。

alias ​

  • 类型: Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>

定义测试运行时使用的自定义别名。它们将与 resolve.alias 中的别名合并。

globals ​

  • 类型: boolean
  • 默认值: false
  • CLI: --globals, --globals=false

默认情况下,为了保证代码的清晰性,vitest 不提供全局 API。如果你更喜欢像 Jest 那样全局使用 API,可以将 --globals 选项传递给 CLI,或在配置中添加 globals: true。

ts
// vite.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    globals: true,
  },
});

为了让 TypeScript 能够识别全局 API,请将 vitest/globals 添加到 tsconfig.json 文件的 types 字段中

json
// tsconfig.json
{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}

如果你已经在项目中使用 unplugin-auto-import,你也可以直接使用它来自动导入这些 API。

ts
// vite.config.ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';

export default defineConfig({
  plugins: [
    AutoImport({
      imports: ['vitest'],
      dts: true, // 生成 TypeScript 声明
    }),
  ],
});

environment ​

  • 类型: 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
  • 默认: 'node'
  • CLI: --environment=<env>

测试环境:Vitest 默认使用 Node.js 环境。如果您的应用是 Web 应用,可以使用浏览器环境,例如 jsdom 或 happy-dom。如果您的应用是边缘计算函数,可以使用 edge-runtime 环境。

您可以通过在文件顶部添加 @vitest-environment 文档注释或注释,为该文件中的所有测试指定环境:

文档注释样式:

js
/**
 * @vitest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

注释格式:

js
// @vitest-environment happy-dom

test('use happy-dom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

为了与 Jest 兼容,Vitest 也支持 @jest-environment:

js
/**
 * @jest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

如果您使用 --threads=false 标志运行 Vitest,测试将按以下环境顺序运行:node、jsdom、happy-dom、edge-runtime、custom environments(自定义环境)。这意味着相同环境的测试会被组合在一起运行,但仍然会保持顺序。

从 0.23.0 开始,您可以定义自定义环境。当使用非内置环境时,Vitest 会尝试加载 vitest-environment-${name} 包。该包应导出一个符合 Environment 接口的对象:

ts
import type { Environment } from 'vitest';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  setup() {
    // custom setup
    return {
      teardown() {
        // called after all tests with this env have been run
      },
    };
  },
};

Vitest 还通过 vitest/environments 入口暴露了 builtinEnvironments,以方便您扩展内置环境。您可以在 我们的指南 中阅读更多关于扩展环境的信息。

environmentOptions ​

  • 类型: Record<'jsdom' | string, unknown>
  • 默认: {}

这些选项会被传递给当前 environment 的 setup 方法。默认情况下,如果您使用 JSDOM 作为测试环境,则只能配置 JSDOM 选项。

environmentMatchGlobs ​

  • 类型: [string, EnvironmentName][]
  • 默认: []

根据 glob 模式自动分配环境。将使用第一个匹配的模式。

例如:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    environmentMatchGlobs: [
      // tests/dom 目录下的所有测试将在 jsdom 环境中运行
      ['tests/dom/**', 'jsdom'],
      // 所有名称匹配 *.edge.test.ts 的测试将在 edge-runtime 环境中运行
      ['**/*.edge.test.ts', 'edge-runtime'],
      // ...
    ],
  },
});

poolMatchGlobs ​

  • 类型: [string, 'threads' | 'child_process' | 'experimentalVmThreads'][]
  • 默认: []
  • 版本: 自 Vitest 0.29.4 起

根据 glob 模式自动分配测试运行的池。将使用第一个匹配的模式。

例如:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    poolMatchGlobs: [
      // "worker-specific" 目录下的所有测试将在 worker 线程中运行,如同启用了 `--threads` 选项
      ['**/tests/worker-specific/**', 'threads'],
      // "browser" 目录下的所有测试将在实际浏览器中运行
      ['**/tests/browser/**', 'browser'],
      // 如果没有指定其他 glob 模式,所有其他测试将基于 "browser.enabled" 和 "threads" 选项运行
      // ...
    ],
  },
});

update* ​

  • 类型: boolean
  • 默认: false
  • CLI: -u, --update, --update=false

更新快照。这将更新所有已更改的快照并删除过期的快照。

watch* ​

  • 类型: boolean
  • 默认: true
  • CLI: -w, --watch, --watch=false

启用监听模式。

root ​

  • 类型: string
  • CLI: -r <path>, --root=<path>

项目根目录。

reporters* ​

  • 类型: Reporter | Reporter[]
  • 默认: 'default'
  • CLI: --reporter=<name>, --reporter=<name1> --reporter=<name2>

用于输出的自定义报告器。报告器可以是 Reporter 实例 或字符串,用于选择内置报告器:

  • 'default' - 在测试套件通过时折叠它们。
  • 'basic' - 提供类似于 CI 中默认报告器的报告。
  • 'verbose' - 保持完整的任务树可见。
  • 'dot' - 将每个任务显示为单个点。
  • 'junit' - JUnit XML 报告器(您可以使用 VITEST_JUNIT_SUITE_NAME 环境变量配置 testsuites 标签名称,并使用 VITEST_JUNIT_CLASSNAME 配置 classname 标签属性)。
  • 'json' - 提供一个简单的 JSON 摘要。
  • 'html' - 基于 @vitest/ui 输出 HTML 报告。
  • 'hanging-process' - 显示挂起的进程列表,如果 Vitest 无法安全退出进程。这可能是一个开销较大的操作,仅当 Vitest 始终无法退出进程时才启用它。
  • 自定义报告器的路径(例如 './path/to/reporter.ts'、'@scope/reporter')。

outputFile* ​

  • 类型: string | Record<string, string>
  • CLI: --outputFile=<path>, --outputFile.json=./path

当同时指定 --reporter=json、--reporter=html 或 --reporter=junit 选项时,将测试结果写入文件。 通过提供对象而不是字符串,您可以在使用多个报告器时为每个报告器定义单独的输出文件。

experimentalVmThreads ​

  • 类型: boolean
  • CLI: --experimentalVmThreads, --experimental-vm-threads
  • 版本: 自 Vitest 0.34.0 起

使用 VM 上下文(在沙盒环境中)在工作线程池中运行测试。

这可以加快测试运行速度,但 VM 模块在运行 ESM 代码 时可能不稳定。您的测试可能会 泄漏内存 - 为了解决这个问题,请考虑手动调整 experimentalVmWorkerMemoryLimit 的值。

WARNING

在沙盒中运行代码有一些优点(更快的测试),但也存在一些缺点。

  • 本地模块中的全局变量(例如 fs、path 等)与测试环境中存在的全局变量不同。因此,这些本地模块抛出的任何错误都将引用与您的代码中使用的错误构造函数不同的错误构造函数:
ts
try {
  fs.writeFileSync('/doesnt exist');
} catch (err) {
  console.log(err instanceof Error); // false
}
  • 导入 ES 模块会无限期地缓存它们,如果您有很多上下文(测试文件),这会引入内存泄漏。Node.js 中没有清除该缓存的 API。
  • 在沙盒环境中访问全局变量 需要更长的时间。

请注意在使用此选项时可能遇到的这些问题。Vitest 团队无法解决这些问题。

experimentalVmWorkerMemoryLimit ​

  • 类型: string | number
  • CLI: --experimentalVmWorkerMemoryLimit, --experimental-vm-worker-memory-limit
  • 默认: 1 / CPU Cores (1 / CPU 核心数)
  • 版本: 自 Vitest 0.34.0 起

指定在回收工作线程之前的工作线程内存限制。此值在很大程度上取决于您的环境,因此最好手动指定它,而不是依赖默认值。

此选项仅影响在 VM 上下文 中运行测试的工作线程。

TIP

此实现基于 Jest 的 workerIdleMemoryLimit。

限制值可以用多种不同方式指定,最终都会使用 Math.floor 函数将其转换为整数值:

  • <= 1 - 该值被假定为系统内存的百分比。因此,0.5 将工作线程的内存限制设置为总系统内存的一半。

  • \> 1 - 假定为固定字节值。由于之前的规则,如果您想要 1 字节的值,您可以使用 1.1。

  • 带有单位的值表示固定内存限制

    • 50% - 如上所述,占总系统内存的百分比。

    • 100KB、65MB 等 - 带有单位表示固定内存限制。

      • K / KB - 千字节 (x1000)
      • KiB - 千比字节 (x1024)
      • M / MB - 兆字节
      • MiB - 兆比字节
      • G / GB - 吉字节
      • GiB - 吉比字节

WARNING

由于报告的系统内存不正确,基于百分比的内存限制 在 Linux CircleCI 工作线程上不起作用。

threads ​

  • 类型: boolean
  • 默认: true
  • CLI: --threads, --threads=false

使用 tinypool(Piscina 的轻量级分支)启用多线程。在 Vitest 0.29.0 之前,即使禁用此选项,Vitest 仍然在工作线程内运行测试。从 0.29.0 开始,如果禁用此选项,Vitest 将使用 child_process 生成一个子进程来运行测试,这意味着您可以使用 process.chdir 和其他在工作线程内不可用的 API。如果想恢复到以前的行为,可改用 --singleThread 选项。

禁用此选项会导致所有测试在多个子进程中运行。

singleThread ​

  • 类型: boolean
  • 默认: false
  • 版本: 自 Vitest 0.29.0 起

在单个工作线程中运行具有相同环境的所有测试。这将禁用内置模块隔离(您的源代码或 内联 代码仍将为每个测试重新评估),但可以提高测试性能。在 Vitest 0.29.0 之前,这相当于使用 --no-threads。

WARNING

即使此选项会强制测试逐个运行,它也与 Jest 的 --runInBand 不同。Vitest 使用工作线程不仅用于并行运行测试,还用于提供隔离。通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中运行,因此您必须自己提供隔离。

如果依赖全局状态(前端框架通常如此)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题。对于不依赖全局状态或能轻松绕过的测试,这可以提高测试速度(最多快 3 倍)。

maxThreads* ​

  • 类型: number
  • 默认: 可用 CPU 数量

最大线程数。您还可以使用 VITEST_MAX_THREADS 环境变量。

minThreads* ​

  • 类型: number
  • 默认: 可用 CPU 数量

最小线程数。您还可以使用 VITEST_MIN_THREADS 环境变量。

useAtomics* ​

  • 类型: boolean
  • 默认: false
  • 版本: 自 Vitest 0.28.3 起

使用 Atomics 同步线程。

在某些情况下,这可以提高性能,但可能会在较旧的 Node 版本中导致段错误。

testTimeout ​

  • 类型: number
  • 默认: 5000
  • CLI: --test-timeout=5000

测试的默认超时时间(以毫秒为单位)。

hookTimeout ​

  • 类型: number
  • 默认: 10000

钩子的默认超时时间(以毫秒为单位)。

teardownTimeout* ​

  • 类型: number
  • 默认: 10000

Vitest 关闭时等待关闭的默认超时时间(以毫秒为单位)。

silent* ​

  • 类型: boolean
  • 默认: false
  • CLI: --silent, --silent=false

禁止测试的控制台输出。

setupFiles ​

  • 类型: string | string[]

设置文件的路径。它们将在每个测试文件之前运行。

INFO

更改设置文件将触发所有测试的重新运行。

您可以使用 process.env.VITEST_POOL_ID(类似整数的字符串)来区分线程。如果使用 threads: false 运行,该值始终为 '1'。

TIP

请注意,如果您正在运行 --threads=false,则此设置文件将在相同的全局范围内多次运行。这意味着,您在每次测试之前都在访问同一个全局对象,因此请确保您没有执行不必要的重复操作。

例如,您可以依赖于一个全局变量:

ts
import { config } from '@some-testing-lib';

if (!globalThis.defined) {
  config.plugins = [myCoolPlugin];
  computeHeavyThing();
  globalThis.defined = true;
}

// hooks are reset before each suite
afterEach(() => {
  cleanup();
});

globalThis.resetBeforeEachTest = true;

globalSetup ​

  • 类型: string | string[]

全局设置文件的路径,相对于项目根目录。

全局设置文件可以导出命名函数 setup 和 teardown,也可以导出一个返回 teardown 函数的 default 函数 (示例)。

INFO

可以有多个 globalSetup 文件。setup 和 teardown 按顺序执行,teardown 的顺序相反。

WARNING

请注意,全局设置在不同的全局范围内运行,因此您的测试无法访问此处定义的变量。

watchExclude* ​

  • 类型: string[]
  • 默认: ['**/node_modules/**', '**/dist/**']

Glob 模式,用于指定要忽略的文件路径。这些文件路径的更改不会触发监听重新运行。

forceRerunTriggers* ​

  • 类型: string[]
  • 默认: ['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']

Glob 模式,用于指定将触发整个测试套件重新运行的文件路径。当与 --changed 参数配对使用时,如果在 git diff 中找到触发器,将运行整个测试套件。

如果您正在测试调用 CLI 命令,这将非常有用,因为 Vite 无法构建模块图:

ts
test('execute a script', async () => {
  // 如果 `dist/index.js` 的内容发生更改,Vitest 无法重新运行此测试
  await execa('node', ['dist/index.js']);
});

TIP

确保文件未被 watchExclude 排除。

isolate ​

  • 类型: boolean
  • 默认值: true
  • CLI: --isolate, --isolate=false

为每个测试文件创建独立的运行环境。当禁用 --threads 时,此选项无效。

此选项不影响 experimentalVmThreads。

coverage* ​

你可以使用 v8、istanbul 或 自定义覆盖率解决方案 来收集代码覆盖率。

你可以通过 CLI 使用点符号来指定覆盖率选项:

sh
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all

WARNING

如果使用带点符号的覆盖率选项,请务必指定 --coverage.enabled。不要单独提供 --coverage 选项。

coverage.provider ​

  • 类型: 'v8' | 'istanbul' | 'custom'
  • 默认值: 'v8'
  • CLI: --coverage.provider=<provider>

使用 provider 选择用于收集覆盖率的工具。

coverage.enabled ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.enabled, --coverage.enabled=false

启用覆盖率收集。可以使用 --coverage 命令行选项覆盖此设置。

coverage.include ​

  • 类型: string[]
  • 默认值: ['**']
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.include=<path>, --coverage.include=<path1> --coverage.include=<path2>

包含在覆盖率计算中的文件列表,使用 glob 模式。

coverage.extension ​

  • 类型: string | string[]
  • 默认值: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.extension=<extension>, --coverage.extension=<extension1> --coverage.extension=<extension2>

指定要包含的文件扩展名。

coverage.exclude ​

  • 类型: string[]
  • 默认值:
js
[
  'coverage/**',
  'dist/**',
  'packages/*/test?(s)/**',
  '**/*.d.ts',
  '**/virtual:*',
  '**/__x00__*',
  '**/\x00*',
  'cypress/**',
  'test?(s)/**',
  'test?(-*).?(c|m)[jt]s?(x)',
  '**/*{.,-}{test,spec}.?(c|m)[jt]s?(x)',
  '**/__tests__/**',
  '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
  '**/vitest.{workspace,projects}.[jt]s?(on)',
  '**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}',
];
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.exclude=<path>, --coverage.exclude=<path1> --coverage.exclude=<path2>

从覆盖率计算中排除的文件列表,使用 glob 模式。

coverage.all ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.all, --coverage.all=false

是否将所有文件(包括未被测试覆盖的文件)包含在覆盖率报告中。

coverage.clean ​

  • 类型: boolean
  • 默认值: true
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.clean, --coverage.clean=false

在运行测试之前清理之前的覆盖率结果。

coverage.cleanOnRerun ​

  • 类型: boolean
  • 默认值: true
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.cleanOnRerun, --coverage.cleanOnRerun=false

在 watch 模式下重新运行时清理覆盖率报告。

coverage.reportsDirectory ​

  • 类型: string
  • 默认值: './coverage'
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.reportsDirectory=<path>

用于存放覆盖率报告的目录。

coverage.reporter ​

  • 类型: string | string[] | [string, {}][]
  • 默认值: ['text', 'html', 'clover', 'json']
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.reporter=<reporter>, --coverage.reporter=<reporter1> --coverage.reporter=<reporter2>

要使用的覆盖率报告器列表。有关所有报告器的详细列表,请参阅 istanbul 文档。有关报告器特定选项的详细信息,请参阅 @types/istanbul-reporter。

报告器有三种不同的配置方式:

  • 单个报告器:{ reporter: 'html' }
  • 多个报告器(无选项):{ reporter: ['html', 'json'] }
  • 具有选项的单个或多个报告器:
    ts
    {
      reporter: [
        ['lcov', { projectRoot: './src' }],
        ['json', { file: 'coverage.json' }],
        ['text'],
      ];
    }

从 Vitest 0.31.0 开始,你可以在 Vitest UI 中查看覆盖率报告。请参阅 Vitest UI 覆盖率 了解更多信息。

coverage.reportOnFailure ​

  • 类型: boolean
  • 默认值: false (自 Vitest 0.34.0 起)
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.reportOnFailure, --coverage.reportOnFailure=false
  • 版本: 自 Vitest 0.31.2 起

即使测试失败,也生成覆盖率报告。

coverage.allowExternal ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.allowExternal, --coverage.allowExternal=false

收集 项目 root 目录之外的文件的覆盖率信息。

coverage.skipFull ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.skipFull, --coverage.skipFull=false

不显示语句、分支和函数覆盖率均为 100% 的文件。

coverage.perFile ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.perFile, --coverage.perFile=false

检查每个文件的覆盖率阈值。 实际阈值请参考 lines、functions、branches 和 statements 的配置。

coverage.thresholdAutoUpdate ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholdAutoUpdate=<boolean>

当当前覆盖率高于配置的阈值时,自动将 lines、functions、branches 和 statements 的阈值更新到配置文件。 此选项有助于在覆盖率提高时维护阈值。

coverage.lines ​

  • 类型: number
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.lines=<number>

行覆盖率的阈值。 有关更多信息,请参见 istanbul 文档。

coverage.functions ​

  • 类型: number
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.functions=<number>

函数覆盖率的阈值。 有关更多信息,请参见 istanbul 文档。

coverage.branches ​

  • 类型: number
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.branches=<number>

分支覆盖率的阈值。 有关更多信息,请参见 istanbul 文档。

coverage.statements ​

  • 类型: number
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.statements=<number>

语句覆盖率的阈值。 有关更多信息,请参见 istanbul 文档。

coverage.100 ​

  • 类型: boolean
  • 默认值: false
  • 适用于 provider: 'v8' | 'istanbul'
  • CLI: --coverage.100, --coverage.100=false

--coverage.lines 100 --coverage.functions 100 --coverage.branches 100 --coverage.statements 100 的快捷方式。

coverage.ignoreClassMethods ​

  • 类型: string[]
  • 默认值: []
  • 适用于 provider: 'istanbul'
  • CLI: --coverage.ignoreClassMethods=<method>

设置为一个数组,其中包含要忽略覆盖率计算的类方法名称。 有关更多信息,请参见 istanbul 文档。

coverage.watermarks ​

  • 类型:
ts
{
  statements?: [number, number],
  functions?: [number, number],
  branches?: [number, number],
  lines?: [number, number]
}
  • 默认值:
ts
{
  statements: [50, 80],
  functions: [50, 80],
  branches: [50, 80],
  lines: [50, 80]
}
  • 适用于 provider: 'v8' | 'istanbul'

语句、行、分支和函数的覆盖率水印线。有关更多信息,请参见 istanbul 文档。

coverage.customProviderModule ​

  • 类型: string
  • 适用于 provider: 'custom'
  • CLI: --coverage.customProviderModule=<path or module name>

指定自定义覆盖率 provider 模块的模块名或路径。有关更多信息,请参见 指南 - 自定义覆盖率 Provider。

testNamePattern* ​

  • 类型 string | RegExp
  • CLI: -t <pattern>, --testNamePattern=<pattern>, --test-name-pattern=<pattern>

运行全名与指定模式匹配的测试。 如果将 OnlyRunThis 添加到此属性,则会跳过测试名称中不包含 OnlyRunThis 单词的测试。

js
import { expect, test } from 'vitest';

// run (运行)
test('OnlyRunThis', () => {
  expect(true).toBe(true);
});

// skipped (跳过)
test('doNotRun', () => {
  expect(true).toBe(true);
});

open* ​

  • 类型: boolean
  • 默认值: false
  • CLI: --open, --open=false

打开 Vitest UI(正在开发中)。

api ​

  • 类型: boolean | number
  • 默认值: false
  • CLI: --api, --api.port, --api.host, --api.strictPort

监听端口并提供 API 服务。设置为 true 时,默认端口为 51204。

browser ​

  • 类型: { enabled?, name?, provider?, headless?, api?, slowHijackESM? }
  • 默认值: { enabled: false, headless: process.env.CI, api: 63315 }
  • 版本: 自 Vitest 0.29.4 起
  • CLI: --browser, --browser=<name>, --browser.name=chrome --browser.headless

在浏览器环境中运行 Vitest 测试。默认使用 WebdriverIO 进行测试,但可以通过 browser.provider 选项进行配置。

NOTE

请在 指南页面 中阅读有关在真实浏览器中进行测试的更多信息。

WARNING

这是一个实验性功能。重大更改可能不遵循语义版本控制(semver),请在使用时固定 Vitest 的版本。

browser.enabled ​

  • 类型: boolean
  • 默认值: false
  • CLI: --browser, --browser.enabled=false

默认情况下,是否在浏览器中运行所有测试。可以使用 poolMatchGlobs 选项覆盖此设置。

browser.name ​

  • 类型: string
  • CLI: --browser=safari

在指定的浏览器中运行所有测试。不同 provider 的可用选项:

  • webdriverio: firefox, chrome, edge, safari
  • playwright: firefox, webkit, chromium
  • custom: 将传递给 provider 的任何字符串

browser.headless ​

  • 类型: boolean
  • 默认值: process.env.CI
  • CLI: --browser.headless, --browser.headless=false

在 headless 模式下运行浏览器。如果在 CI 环境中运行 Vitest,则默认会启用此选项。

browser.api ​

  • 类型: number | { port?, strictPort?, host? }
  • 默认值: 63315
  • CLI: --browser.api=63315, --browser.api.port=1234, --browser.api.host=example.com

配置 Vite 服务器的选项,该服务器用于在浏览器中提供代码。不影响 test.api 选项。

browser.provider ​

  • 类型: 'webdriverio'|'playwright'|string
  • 默认值: 'webdriverio'
  • CLI: --browser.provider=playwright

用于运行浏览器测试的 provider 模块路径。Vitest 提供了两个内置 provider,分别是 webdriverio(默认)和 playwright。自定义 provider 应该使用 default 导出,并具有以下接口定义:

ts
export interface BrowserProvider {
  name: string;
  getSupportedBrowsers(): readonly string[];
  initialize(ctx: Vitest, options: { browser: string }): Awaitable<void>;
  openPage(url: string): Awaitable<void>;
  close(): Awaitable<void>;
}

WARNING

这是一个为库作者提供的高级 API。如果只需要在浏览器中运行测试,请使用 browser 配置项。

browser.slowHijackESM ​

  • 类型: boolean
  • 默认值: true
  • 版本: 自 Vitest 0.31.0 起

在 Node.js 环境中运行测试时,Vitest 可以利用其模块解析能力,通过 vi.mock 语法轻松地模拟模块。然而,在浏览器环境中重现 ES 模块的解析机制比较复杂,因此需要在浏览器中使用前转换源文件。

此选项对在 Node.js 环境中运行的测试没有影响。

此选项默认启用。如果你的测试不依赖于 vi.spyOn 监听 ES 模块,也不使用 vi.mock,则可以禁用此选项,以略微提升性能。

clearMocks ​

  • 类型: boolean
  • 默认值: false

在每次测试之前,对所有 spy 调用 .mockClear()。这会清除模拟的历史记录,但不会将其实现重置为默认实现。

mockReset ​

  • 类型: boolean
  • 默认值: false

在每次测试之前,对所有 spy 调用 .mockReset()。这会清除模拟的历史记录,并将其实现重置为空函数(返回 undefined)。

restoreMocks ​

  • 类型: boolean
  • 默认值: false

在每次测试之前,对所有 spy 调用 .mockRestore()。这会清除模拟的历史记录,并将其实现重置为原始状态。

unstubEnvs ​

  • 类型: boolean
  • 默认值: false
  • 版本: 自 Vitest 0.26.0 起

在每次测试之前,将调用 vi.unstubAllEnvs。

unstubGlobals ​

  • 类型: boolean
  • 默认值: false
  • 版本: 自 Vitest 0.26.0 起

在每次测试之前,将调用 vi.unstubAllGlobals。

testTransformMode ​

  • 类型: { web?, ssr? }
  • 版本: 自 Vitest 0.34.0 起

确定与 glob 模式匹配的测试中,导入模块的转换方式。默认情况下,转换方式取决于运行环境。例如,在 JSDOM 环境下运行的测试,会使用 ssr: false 标志来处理所有文件;而在 Node 环境下运行的测试,则会使用 ssr: true 来处理所有模块。

testTransformMode.ssr ​

  • 类型: string[]
  • 默认值: []

对指定测试中的所有模块应用 SSR 转换流程。
Vite 插件在处理这些文件时将收到 ssr: true 标志。

testTransformMode.web ​

  • 类型: string[]
  • 默认值: []

首先执行针对浏览器的标准转换流程,然后执行 SSR 重写,以便在 Node 环境中运行代码。
Vite 插件在处理这些文件时将收到 ssr: false 标志。

snapshotFormat* ​

  • 类型: PrettyFormatOptions

快照测试的格式化选项。这些选项会传递给 pretty-format。

resolveSnapshotPath* ​

  • 类型: (testPath: string, snapExtension: string) => string
  • 默认值: 将快照文件存储在 __snapshots__ 目录中

覆盖默认的快照路径。例如,要将快照存储在测试文件旁边:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
  },
});

allowOnly ​

  • 类型: boolean
  • 默认值: false
  • CLI: --allowOnly, --allowOnly=false

允许运行被标记为 only 的测试套件。

dangerouslyIgnoreUnhandledErrors* ​

  • 类型: boolean
  • 默认值: false
  • CLI: --dangerouslyIgnoreUnhandledErrors --dangerouslyIgnoreUnhandledErrors=false

忽略所有未处理的错误。

passWithNoTests* ​

  • 类型: boolean
  • 默认值: false
  • CLI: --passWithNoTests, --passWithNoTests=false

如果没有找到任何测试,Vitest 不会判定为失败。

logHeapUsage ​

  • 类型: boolean
  • 默认值: false
  • CLI: --logHeapUsage, --logHeapUsage=false

在每次测试后显示堆使用情况。有助于调试内存泄漏。

css ​

  • 类型: boolean | { include?, exclude?, modules? }

配置是否处理 CSS。如果排除 CSS 文件,它们会被替换为空字符串,从而绕过后续处理。CSS Modules 将返回一个代理,以避免影响运行时。

css.include ​

  • 类型: RegExp | RegExp[]
  • 默认值: []

应该返回实际 CSS,并由 Vite 流程处理的文件的 RegExp 模式。

TIP

要处理所有 CSS 文件,请使用正则表达式 /.+/。

css.exclude ​

  • 类型: RegExp | RegExp[]
  • 默认值: []

将返回空 CSS 文件的 RegExp 模式。

css.modules ​

  • 类型: { classNameStrategy? }
  • 默认值: {}

css.modules.classNameStrategy ​

  • 类型: 'stable' | 'scoped' | 'non-scoped'
  • 默认值: 'stable'

如果你决定处理 CSS 文件,可以配置 CSS 模块中的类名是否需要进行作用域限定。你可以选择以下选项之一:

  • stable: 类名将生成为 _${name}_${hashedFilename}。这意味着如果 CSS 内容发生更改,生成的类名将保持不变;但如果文件名被修改或文件被移动到另一个文件夹,则会发生更改。如果你使用快照功能,此设置很有用。
  • scoped: 类名将按照通常的方式生成,并遵循 css.modules.generateScopeName 方法(如果已定义),且 CSS 处理已启用。默认情况下,文件名会生成为 _${name}_${hash},其中 hash 包括文件名和文件内容。
  • non-scoped: 类名将不会进行哈希处理。

WARNING

默认情况下,Vitest 导出一个代理,从而跳过 CSS Modules 的处理流程。如果你依赖于类上的 CSS 属性,你必须使用 include 选项启用 CSS 处理。

maxConcurrency ​

  • 类型: number
  • 默认值: 5

允许同时运行标记为 test.concurrent 的测试数量。

超过此限制的测试将会进入队列,等待可用插槽出现时再运行。

cache* ​

  • 类型: false | { dir? }

配置 Vitest 缓存策略的选项。目前,Vitest 会缓存测试结果,以便优先运行耗时较长和失败的测试。

cache.dir ​

  • 类型: string
  • 默认值: node_modules/.vitest

缓存目录的路径。

sequence ​

  • 类型: { sequencer?, shuffle?, seed?, hooks?, setupFiles? }

用于配置测试排序方式的选项。

可通过点表示法在 CLI 中提供序列选项:

sh
npx vitest --sequence.shuffle --sequence.seed=1000

sequence.sequencer* ​

  • 类型: TestSequencerConstructor
  • 默认值: BaseSequencer

一个自定义类,用于定义分片和排序的逻辑。如果只需要重新定义 sort 和 shard 方法中的一个,可以从 vitest/node 扩展 BaseSequencer,但需要同时存在这两个方法。

分片发生在排序之前,并且仅在提供 --shard 选项时发生。

sequence.shuffle ​

  • 类型: boolean
  • 默认值: false
  • CLI: --sequence.shuffle, --sequence.shuffle=false

如需测试随机运行,你可以使用此选项或 CLI 参数 --sequence.shuffle 启用它。

Vitest 通常会利用缓存对测试进行排序,以便优先运行耗时较长的测试,从而加快整体测试速度。如果测试以随机顺序运行,将会失去这种性能提升,但可能有助于发现意外依赖于先前运行的测试。

sequence.concurrent ​

  • 类型: boolean
  • 默认值: false
  • CLI: --sequence.concurrent, --sequence.concurrent=false
  • 版本: 自 Vitest 0.32.2 起

如需测试并行运行,你可以使用此选项或 CLI 参数 --sequence.concurrent 启用它。

sequence.seed* ​

  • 类型: number
  • 默认值: Date.now()
  • CLI: --sequence.seed=1000

如果测试以随机顺序运行,则设置随机化种子。

sequence.hooks ​

  • 类型: 'stack' | 'list' | 'parallel'
  • 默认值: 'parallel'
  • CLI: --sequence.hooks=<value>

修改钩子的执行顺序。

  • stack 将以相反的顺序排列 "after" 钩子,"before" 钩子将按照它们定义的顺序运行
  • list 将按照它们定义的顺序排列所有钩子
  • parallel 将在一个组中并行运行钩子(父套件中的钩子仍将在当前套件的钩子之前运行)

sequence.setupFiles ​

  • 类型: 'list' | 'parallel'
  • 默认值: 'parallel'
  • CLI: --sequence.setupFiles=<value>
  • 版本: 自 Vitest 0.29.3 起

更改执行设置文件的顺序。

  • list 将按照它们定义的顺序运行设置文件
  • parallel 将并行运行设置文件

typecheck ​

用于配置 类型检查 测试环境的选项。

typecheck.checker ​

  • 类型: 'tsc' | 'vue-tsc' | string
  • 默认值: tsc

使用什么工具进行类型检查。Vitest 将根据类型,生成一个包含特定参数的进程,以便于解析。Checker 应该实现与 tsc 相同的输出格式。

你需要安装一个包才能使用 typechecker:

  • tsc 需要 typescript 包
  • vue-tsc 需要 vue-tsc 包

你也可以传递一个自定义二进制文件或命令名称的路径,该路径产生与 tsc --noEmit --pretty false 相同的输出。

typecheck.include ​

  • 类型: string[]
  • 默认值: ['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']

应该被视为测试文件的 Glob 模式

typecheck.exclude ​

  • 类型: string[]
  • 默认值: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']

不应被视为测试文件的 Glob 模式

typecheck.allowJs ​

  • 类型: boolean
  • 默认值: false

检查具有 @ts-check 注释的 JS 文件。如果你在 tsconfig 中启用了它,这将不会覆盖它。

typecheck.ignoreSourceErrors ​

  • 类型: boolean
  • 默认值: false

如果 Vitest 在测试文件之外发现了错误,则不要判定为失败。这将完全不会显示非测试相关的错误。

默认情况下,如果 Vitest 发现源代码错误,将会导致测试套件失败。

typecheck.tsconfig ​

  • 类型: string
  • 默认值: 尝试查找最接近的 tsconfig.json

自定义 tsconfig 文件的路径,相对于项目根目录。

slowTestThreshold* ​

  • 类型: number
  • 默认值: 300

测试被判定为慢速,并在结果中报告为慢速的毫秒阈值。

chaiConfig ​

  • 类型: { includeStack?, showDiff?, truncateThreshold? }
  • 默认值: { includeStack: false, showDiff: true, truncateThreshold: 40 }
  • 版本: 自 Vitest 0.30.0 起

等效于 Chai config。

chaiConfig.includeStack ​

  • 类型: boolean
  • 默认值: false

控制是否在断言错误信息中包含堆栈跟踪。默认值 false 会抑制错误消息中的堆栈跟踪。

chaiConfig.showDiff ​

  • 类型: boolean
  • 默认值: true

影响抛出的 AssertionErrors 中是否包含 showDiff 标志。false 将始终为 false;当断言请求显示差异时,true 将为 true。

chaiConfig.truncateThreshold ​

  • 类型: number
  • 默认值: 40

设置断言错误中,实际值和期望值的长度阈值。如果超过此阈值,例如对于大型数据结构,该值将替换为类似 [ Array(3) ] 或 { Object (prop1, prop2) } 的内容。如需完全禁用截断,请将其设置为 0。

此配置选项会影响 test.each 标题和断言错误消息中的截断值。

bail ​

  • 类型: number
  • 默认值: 0
  • CLI: --bail=<value>
  • 版本: 自 Vitest 0.31.0 起

当失败测试的数量达到指定值时,停止测试执行。

对于 CI 构建,如果你只关注 100% 成功的构建,并希望在发生测试失败时尽快停止测试执行,那么这个选项非常有用。bail 选项可以通过阻止 CI 在发生故障后继续运行更多测试,从而加速 CI 运行。

retry ​

  • 类型: number
  • 默认值: 0
  • CLI: --retry=<value>
  • 版本: 自 Vitest 0.32.3 起

如果测试失败,则重试指定的次数。

onConsoleLog ​

  • 类型: (log: string, type: 'stdout' | 'stderr') => false | void

用于处理测试中 console.log 输出的自定义处理函数。如果返回 false,Vitest 将不会将日志打印到控制台。

可用于过滤掉来自第三方库的日志。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    onConsoleLog(log: string, type: 'stdout' | 'stderr'): boolean | void {
      if (log === 'message from third party library' && type === 'stdout')
        return false;
    },
  },
});

diff ​

  • 类型: string
  • CLI: --diff=<value>
  • 版本: 自 Vitest 0.34.5 起

用于生成差异界面的差异配置文件的路径。如需自定义差异显示,这将非常有用。

ts
import type { DiffOptions } from 'vitest';
import c from 'picocolors';

export default {
  aIndicator: c.bold('--'),
  bIndicator: c.bold('++'),
  omitAnnotationLines: true,
} satisfies DiffOptions;
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    diff: './vitest.diff.ts',
  },
});
Pager
上一页assertType

基于 MIT 许可证 发布。

版权所有 (c) 2021-Present Vitest Team

https://v0.vitest.dev/config/

基于 MIT 许可证 发布。

版权所有 (c) 2021-Present Vitest Team