工作区
Vitest 通过工作区配置文件为单仓库提供内置支持。您可以创建工作区来定义项目的设置。
定义工作区
工作区应该在其根目录(如果您有配置文件,则与配置文件在同一文件夹中)中包含一个 vitest.workspace
或 vitest.projects
文件。Vitest 支持此文件的 ts
/js
/json
扩展名。
工作区配置文件应该有一个默认导出,其中包含一个文件或 glob 模式列表,这些文件或 glob 模式引用您的项目。例如,如果您有一个名为 packages
的文件夹包含您的项目,您可以使用此配置文件定义一个工作区
export default [
'packages/*'
]
Vitest 将考虑 packages
中的每个文件夹作为一个单独的项目,即使它内部没有配置文件。
警告
Vitest 不会将根配置视为工作区项目(因此它不会运行在 include
中指定的测试),除非它在此配置中指定。
您也可以使用其配置文件引用项目
export default [
'packages/*/vitest.config.{e2e,unit}.ts'
]
此模式将仅包含具有 vitest.config
文件的项目,该文件在扩展名之前包含 e2e
和 unit
。
警告
如果您使用 glob 模式引用文件名,请确保您的配置文件以 vite.config
或 vitest.config
开头。否则 Vitest 将跳过它。
您还可以使用内联配置定义项目。工作区文件支持同时使用这两种语法。
import { } from 'vitest/config'
// defineWorkspace provides a nice type hinting DX
export default ([
'packages/*',
{
// add "extends" to merge two configs together
: './vite.config.js',
: {
: ['tests/**/*.{browser}.test.{ts,js}'],
// it is recommended to define a name when using inline configs
: 'happy-dom',
: 'happy-dom',
}
},
{
: {
: ['tests/**/*.{node}.test.{ts,js}'],
: 'node',
: 'node',
}
}
])
警告
所有项目都应该有唯一的名称。否则,Vitest 将抛出错误。如果您没有在内联配置中提供名称,Vitest 将分配一个数字。如果您没有在使用 glob 语法定义的项目配置中提供名称,Vitest 默认情况下将使用目录名称。
如果您不依赖内联配置,您只需在根目录中创建一个小的 json 文件
[
"packages/*"
]
工作区项目不支持所有配置属性。为了更好的类型安全性,请在项目配置文件中使用 defineProject
而不是 defineConfig
方法
import { } from 'vitest/config'
export default ({
: {
: 'jsdom',
// "reporters" is not supported in a project config,
// so it will show an error
: ['json']
}
})
运行测试
要在工作区中运行测试,请在根目录的 package.json
中定义一个脚本
{
"scripts": {
"test": "vitest"
}
}
现在可以使用您的包管理器运行测试
npm run test
yarn test
pnpm run test
bun test
如果您需要仅在单个项目中运行测试,请使用 --project
CLI 选项
npm run test --project e2e
提示
CLI 选项 --project
可以使用多次来过滤掉多个项目
npm run test --project e2e --project unit
配置
没有一个配置选项是从根级配置文件继承的。您可以创建共享配置文件并将其与项目配置文件合并
import { defineProject, mergeConfig } from 'vitest/config'
import configShared from '../vitest.shared.js'
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
}
})
)
此外,某些配置选项在项目配置中不允许。最值得注意的是
coverage
:覆盖率是针对整个工作区完成的reporters
:仅支持根级报告器resolveSnapshotPath
:仅尊重根级解析器- 所有其他不影响测试运行器的选项
提示
所有在项目配置中不支持的配置选项在 "配置" 页面中旁边都有 * 标记。
覆盖率
工作区项目的覆盖率开箱即用。但是,如果您启用了 all
选项并在某些项目中使用非传统扩展名,则需要在根配置文件中有一个处理此扩展名的插件。
例如,如果您有一个使用 Vue 文件的包,它有自己的配置文件,但某些文件未在您的测试中导入,覆盖率将失败,因为它试图分析未使用文件的用法,因为它依赖于根配置而不是项目配置。