Day8 vites 之 vitest配置第四版

pool

Type: 'threads' | 'forks' | 'vmThreads'

Default: 'threads'

Version: Since Vitest 1.0.0-beta

取值:用于运行测试的池。

threads * 线程 *

使用tinypool(Piscina 的轻量级分支)启用多线程。

注意:

  • 使用线程时,您无法使用与进程相关的 API,例如 process.chdir()

  • 一些用本机语言编写的库,例如 Prisma、 bcryptcanvas ,在多线程中运行时会出现问题并遇到段错误。

    • 在这些情况下,建议使用 forks 池。

forks * 叉子

通过tinypool使用 child_process 而不是 worker_threads

注意:

  • 测试和主进程之间的通信不如 threads 池那么快。

  • forks 池中提供了与进程相关的 API,例如 process.chdir()

vmThreads * 虚拟机线程 *

使用 threads 池中的 VM 上下文(在沙盒环境内)运行测试。

注意:

  • 这使得测试运行得更快,但运行 ESM 代码时 VM 模块不稳定。

  • 您的测试将泄漏内存 - 为了解决这个问题,请考虑手动编辑 poolOptions.vmThreads.memoryLimit 值。

警告

  • 在沙箱中运行代码有一些优点(测试速度更快),但也有许多缺点。

    • 本机模块中的全局变量(例如 fspath 等)与测试环境中存在的全局变量不同。因此,这些本机模块引发的任何错误都将引用与代码中使用的错误构造函数不同的错误构造函数

      try {
        fs.writeFileSync('/doesnt exist')
      }
      catch (err) {
        console.log(err instanceof Error) // false
      }
    • 导入 ES 模块会无限期地缓存它们,如果您有很多上下文(测试文件),这会导致内存泄漏。 Node.js 中没有可以清除该缓存的 API。

    • 在沙箱环境中访问全局变量需要更长的时间。

    • 使用此选项时请注意这些问题。 Vitest 团队无法解决我们这边的任何问题。

poolOptions

Type: Record<'threads' | 'forks' | 'vmThreads', {}>

Default: {}

Version: Since Vitest 1.0.0-beta

poolOptions.threads * 池选项.线程 *

threads 池的选项。

import { defineConfig } from 'vitest/config'
​
export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        // Threads related options here
      }
    }
  }
})

poolOptions.threads.maxThreads

Type: number

Default: available CPU即可用 CPU

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

poolOptions.threads.minThreads

Type: number

Default: available CPU即可用 CPU

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

poolOptions.threads.singleThread

Type: boolean

Default: false

意义:

  • 在单个工作线程内使用相同的环境运行所有测试。

表现

  • 这将禁用内置模块隔离(您的源代码或内联代码仍将针对每个测试重新评估),但可以提高测试性能。

注意:

  • 尽管此选项将强制测试一个接一个地运行,但此选项与 Jest 的 --runInBand 不同。

    • Vitest 使用工作线程不仅可以并行运行测试,还可以提供隔离

    • 通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中,因此您必须自己提供隔离。

  • 如果您依赖全局状态(前端框架通常这样做)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题

poolOptions.threads.useAtomics

Type: boolean

Default: false

  • 作用

    • 使用 Atomics 来同步线程。

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

poolOptions.threads.isolate

Type: boolean

Default: true

隔离每个测试文件的环境

poolOptions.threads.execArgv

Type: string[]

Default: []

将附加参数传递给线程中的 node

poolOptions.forks

forks 池的选项

import { defineConfig } from 'vitest/config'
​
export default defineConfig({
  test: {
    poolOptions: {
      forks: {
        // Forks related options here
      }
    }
  }
})

poolOptions.forks.maxForks

  • Type: number

  • Default: available CPUs 默认值:可用 CPU

  • 值:最大进程数

poolOptions.forks.minForks

Type: number Default: available CPUs 默认值:可用 CPU 值: 最少的进程数量。

poolOptions.forks.isolate

Type: boolean

Default: true

隔离每个测试文件的环境。

poolOptions.forks.singleFork

Type: boolean

Default: false

意义:

  • 在单个子进程中使用相同的环境运行所有测试。

  • 这将禁用内置模块隔离(您的源代码或内联代码仍将针对每个测试重新评估),但可以提高测试性能。

  • 警告

    • 尽管此选项将强制测试一个接一个地运行,但此选项与 Jest 的 --runInBand 不同。

    • Vitest 使用子进程不仅可以并行运行测试,还可以提供隔离。

    • 通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中,因此您必须自己提供隔离。

    • 如果您依赖全局状态(前端框架通常这样做)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题。

poolOptions.forks.execArgv

Type: string[]

Default: []

意义:

  • 将附加参数传递给子进程中的 node 进程

poolOptions.vmThreads

vmThreads 池的选项。

import { defineConfig } from 'vitest/config'
​
export default defineConfig({
  test: {
    poolOptions: {
      vmThreads: {
        // VM threads related options here
      }
    }
  }
})

poolOptions.vmThreads.maxThreads *

  • Type: number

  • Default: available CPUs 默认值:可用 CPU

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

poolOptions.vmThreads.minThreads *

  • Type: number

  • Default: available CPUs 默认值:可用 CPU

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

poolOptions.vmThreads.memoryLimit *

  • Type: string | number

  • Default: 1 / CPU Cores

  • 值:指定工作线程被回收之前的内存限制。

    • 该值在很大程度上取决于您的环境,因此最好手动指定它,而不是依赖默认值。

poolOptions.vmThreads.useAtomics

Type: boolean

Default: false

意义:

  • 使用 Atomics 来同步线程。

注意:

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

poolOptions.vmThreads.execArgv

Type: string[]

Default: []

意义:

  • 将附加参数传递给 VM 上下文中的 node 进程

fileParallelism 文件并行度

Type: boolean Default: true CLI: --no-file-parallelism 、 --fileParallelism=false Version: Since Vitest 1.1 值:

  • 所有测试文件是否应该并行运行。

  • 将其设置为 false 会将 maxWorkers 和 minWorkers 选项覆盖为 1 。

注意:

  • 此选项不会影响在同一文件中运行的测试。如果您想并行运行它们,请在描述中或通过配置使用 concurrent 选项。

maxWorkers

Type: number

Version: Since Vitest 1.1

值:

  • 运行测试的最大工作线程数。

  • poolOptions.{threads,vmThreads}.maxThreads / poolOptions.forks.maxForks 具有更高的优先级。

testTimeout 测试超时

  • Type: number

  • Default: 5000

  • CLI: --test-timeout=5000

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

hookTimeout 钩子超时

  • Type: number

  • Default: 10000

  • 挂钩的默认超时(以毫秒为单位)

teardownTimeout * 拆卸超时 *

  • Type: number

  • Default: 10000

  • Vitest 关闭时等待关闭的默认超时时间,以毫秒为单位

silent

  • Type: boolean

  • Default: false

  • CLI: --silent, --silent=false

  • 值:

    • 测试的静默控制台输出

setupFiles

Type: string | string[]

值:

  • 安装文件的路径。它们将在每个测试文件之前运行

注意:

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

  • 您可以在内部使用 process.env.VITEST_POOL_ID (类似整数的字符串)来区分线程

  • 请注意,如果您正在运行 --threads=false ,则此安装文件将在同一全局范围内多次运行。这意味着,您在每次测试之前都会访问相同的全局对象,因此请确保您没有做超出您需要的事情

globalSetup 全局设置

Type: string | string[]

值:全局安装文件的路径,相对于项目根目录。

意义:全局设置文件可以导出命名函数 setupteardown 或返回拆卸函数的 一个default 函数

注意:

  • 可以有多个全局安装文件。 setup 和teardown 按顺序执行,teardown 按相反顺序执行。

  • 自 Vitest 1.0.0-beta 起,全局设置仅在至少有一个正在运行的测试时运行。这意味着在更改测试文件后,全局设置可能会在监视模式下开始运行(测试文件将等待全局设置完成后再运行)。

  • 请注意,全局设置在不同的全局范围中运行,因此您的测试无法访问此处定义的变量。但是,从 1.0.0 开始,您可以通过 provide 方法将可序列化的数据传递给测试:

    // globalSetup.js
    export default function setup({ provide }) {
      provide('wsPort', 3000)
    }
    ts
    // example.test.js
    import { inject } from 'vitest'
    ​
    inject('wsPort') === 3000
    ​
    //如果您使用 TypeScript,则可以扩展 ProvidedContext 类型以对 provide/inject 方法进行类型安全访问:
    declare module 'vitest' {
      export interface ProvidedContext {
        wsPort: number
      }
    }

watchExclude * 观看排除 *

Type: string[]

Default: ['/node_modules/', '/dist/']

值:触发监视重新运行时将忽略的文件路径的全局模式。

orceRerunTriggers * 强制重新运行触发器

Type: string[]

Default: ['/package.json/', '/vitest.config.*/', '/vite.config.*/']

值:将触发整个套件重新运行的文件路径的全局模式

注意:

  • 当与 --changed 参数配对时,如果在 git diff 中找到触发器,将运行整个测试套件。

  • 如果您正在测试调用 CLI 命令,则很有用,因为 Vite 无法构建模块图:

    test('execute a script', async () => {
      // Vitest cannot rerun this test, if content of `dist/index.js` changes
      await execa('node', ['dist/index.js'])
    })
  • 确保您的文件未被 watchExclude 排除。

coverage * 覆盖范围

  • 可以使用 v8istanbul 或自定义覆盖率解决方案进行覆盖率收集。

  • 可以使用点符号向 CLI 提供覆盖选项

    npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all
    ​
    ​
    //如果您使用带有点表示法的覆盖选项,请不要忘记指定 --coverage.enabled 。在这种情况下,请勿提供单个 --coverage 选项。

coverage.provider

Type: 'v8' | 'istanbul' | 'custom'

Default: 'v8'

CLI: --coverage.provider=<provider>

意义:

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

coverage.enabled

Type: boolean

Default: false

Available for providers: 'v8' | 'istanbul'

CLI: --coverage.enabled, --coverage.enabled=false

意义:

  • 启用覆盖范围收集。可以使用 --coverage CLI 选项覆盖

coverage.include

Type: string[]

Default: ['**']

Available for providers: 'v8' | 'istanbul'

CLI: --coverage.include=<path>, --coverage.include=<path1> --coverage.include=<path2> 意义:

  • 包含在覆盖范围内作为 glob 模式的文件列表

coverage.extension

Type: string | string[]

Default: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte', '.marko']

Available for providers: 'v8' | 'istanbul'

CLI: --coverage.extension=<extension>, --coverage.extension=<extension1> --coverage.extension=<extension2>

coverage.exclude

Type: string[]

Available for providers: 'v8' | 'istanbul'

CLI: --coverage.exclude=<path>, --coverage.exclude=<path1> --coverage.exclude=<path2>

值:作为 glob 模式从覆盖范围中排除的文件列表。

Default:

​
  '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}',
]

coverage.all

Type: Available for providers: 'v8' | 'istanbul'

Default: true (since Vitest 1.0.0)

Available for providers: 'v8' | 'istanbul'

CLI: --coverage.all, --coverage.all=false

意义:

  • 是否将所有文件(包括未经测试的文件)包含到报告中

coverage.clean

Type: boolean Default: true Available for providers: 'v8' | 'istanbul' CLI: --coverage.clean, --coverage.clean=false

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

coverage.cleanOnRerun

  • Type: boolean

  • Default: true

  • Available for providers: 'v8' | 'istanbul'

  • CLI: --coverage.cleanOnRerun, --coverage.cleanOnRerun=false

  • 值:关于监视重播的干净报道报告

coverage.reportsDirectory

  • Type: string

  • Default: './coverage'

  • Available for providers: 'v8' | 'istanbul'

  • CLI: --coverage.reportsDirectory=<path>

  • 值:写入覆盖率报告的目录。

  • 注意:要在 HTML 报告器的输出中预览覆盖率报告,必须将此选项设置为 html 报告目录的子目录(例如 ./html/coverage )。

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值