Skip to content
Vitest 0
Main Navigation 指南API配置高级
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 通过工作区配置文件提供对 monorepo 的内置支持。你可以创建一个工作区来定义你的项目设置。

定义一个工作区 ​

工作区的根目录中应该有一个 vitest.workspace 或 vitest.projects 文件(如果存在配置文件,则与其在同一文件夹中)。Vitest 支持此文件的 ts/js/json 扩展名。

工作区配置文件应有一个默认导出,包含引用项目的文件或 glob 模式列表。例如,如果你有一个名为 packages 的文件夹,其中包含你的项目,你可以使用以下配置文件定义一个工作区:

ts
export default ['packages/*'];

Vitest 会将 packages 目录下的每个文件夹视为独立项目,即使其内部没有配置文件。

WARNING

Vitest 不会将根配置视为工作区项目(因此它不会运行在 include 中指定的测试),除非它在此配置中指定。

你还可以使用其配置文件引用项目:

ts
export default ['packages/*/vitest.config.{e2e,unit}.ts'];

此模式仅包括文件名包含 e2e 和 unit 的 vitest.config 文件中的项目。

WARNING

如果你使用 glob 模式引用文件名,请确保配置文件以 vite.config 或 vitest.config 开头。否则,Vitest 将跳过它。

你还可以使用内联配置定义项目。工作区文件支持同时使用这两种语法。

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

// defineWorkspace 提供了良好的类型提示,改善了开发者体验(DX)
export default defineWorkspace([
  'packages/*',
  {
    // 添加 "extends" 以将两个配置合并在一起
    extends: './vite.config.js',
    test: {
      include: ['tests/**/*.{browser}.test.{ts,js}'],
      // 建议在使用内联配置时为项目定义名称
      name: 'happy-dom',
      environment: 'happy-dom',
    },
  },
  {
    test: {
      include: ['tests/**/*.{node}.test.{ts,js}'],
      name: 'node',
      environment: 'node',
    },
  },
]);

WARNING

所有项目应具有唯一名称。否则,Vitest 会抛出错误。如果未在内联配置中提供名称,Vitest 将分配一个数字。如果使用 glob 语法定义的项目配置中没有提供名称,Vitest 默认会使用目录名。

如果你不依赖内联配置,你只需在根目录中创建一个小的 json 文件:

json
["packages/*"]

工作区项目不支持所有配置属性。为了更好的类型安全,请在项目配置文件中使用 defineProject 而非 defineConfig 方法:

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

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" 在项目配置中不受支持,
    // 因此会显示一个错误
    reporters: ['json'],
  },
});

配置 ​

任何配置选项均不从根级别的配置文件继承。你可以创建一个共享配置文件,并将其与项目配置合并:

ts
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';

export default mergeConfig(
  configShared,
  defineProject({
    test: {
      environment: 'jsdom',
    },
  })
);

此外,某些配置选项在项目配置中不被允许。最值得注意的是:

  • coverage:覆盖率是针对整个工作区计算的
  • reporters:仅支持根级别的报告器
  • resolveSnapshotPath:仅遵循根级别的解析器
  • 所有其他不影响测试运行器的选项

TIP

所有在项目配置中不受支持的配置选项在 "Config" 页面中都有 * 标记。

覆盖率 ​

工作区项目的覆盖率开箱即用。但是,如果你启用了 all 选项,并且某些项目中使用了非常规的扩展名,你需要在根配置文件中添加一个处理此扩展名的插件。

例如,如果你有一个使用 Vue 文件的包,并且它有自己的配置文件,但某些文件未在你的测试中导入,则覆盖率分析将无法处理未使用文件的情况,因为它依赖于根配置而非项目配置。

Pager
上一页特性
下一页命令行界面

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors

https://v0.vitest.dev/guide/workspace

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors