Skip to content
Vitest 1
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 구성 파일 관리

Vitest 구성하기

이 페이지에서

Vitest 구성하기 ​

Vitest 구성 파일을 만들려면 가이드를 참조하세요. 계속하기 전에 Vitest 구성 해석 방식을 이해해야 합니다.

WARNING

여기에 나열된 모든 옵션은 구성의 test 속성에 포함됩니다.

ts
export default defineConfig({
  test: {
    exclude: [],
  },
});

TIP

다음 옵션 외에도 Vite의 모든 구성 옵션을 사용할 수 있습니다. 예를 들어 전역 변수를 정의하는 define 또는 별칭을 정의하는 resolve.alias가 있습니다.

워크스페이스 프로젝트 구성 내에서 지원되지 않는 구성 옵션에는 * 기호가 옆에 표시됩니다.

include ​

  • 타입: string[]
  • 기본값: ['**/*.{test,spec}.?(c|m)[jt]s?(x)']
  • CLI: vitest [...include], vitest **/*.test.js

테스트 파일과 일치하는 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.*']
  • CLI: vitest --exclude "**/excluded-file"

테스트 파일에서 제외할 glob 패턴 목록입니다.

WARNING

이 옵션은 커버리지에 영향을 주지 않습니다. 커버리지 보고서에서 특정 파일을 제외해야 하는 경우 coverage.exclude를 사용하세요.

이 옵션은 CLI 플래그로 제공될 경우 구성을 재정의하지 않는 유일한 옵션입니다. --exclude 플래그를 통해 추가된 모든 glob 패턴은 구성의 exclude에 추가됩니다.

includeSource ​

  • 타입: string[]
  • 기본값: []

소스 코드 내 테스트 파일을 위한 glob 패턴을 지정합니다.

정의되면 Vitest는 import.meta.vitest가 포함된 모든 일치하는 파일을 실행합니다.

server 0.34.0+ ​

  • 타입: { sourcemap?, deps?, ... }

Vite-Node 서버 관련 옵션입니다.

server.sourcemap ​

  • 타입: 'inline' | boolean
  • 기본값: 'inline'

모듈에 인라인 소스 맵을 삽입합니다.

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\//]

Externalize는 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가 인라인 모듈을 변환합니다. 이는 Node가 처리할 수 없는 ESM 형식의 .js를 제공하는 패키지를 처리하는 데 유용할 수 있습니다.

true인 경우 모든 종속성이 인라인됩니다. ssr.noExternal에 지정된 모든 종속성은 기본적으로 인라인됩니다.

server.deps.fallbackCJS ​

  • 타입 boolean
  • 기본값: false

의존성이 ESM 패키지일 때 경로를 기반으로 CJS 버전을 추론합니다. 종속성에 잘못된 ESM 파일이 있는 경우에 유용할 수 있습니다.

패키지가 ESM과 CJS 모드에서 서로 다른 로직을 사용하는 경우 잠재적인 불일치가 발생할 수 있습니다.

server.deps.cacheDir ​

  • 타입 string
  • 기본값: 'node_modules/.vite'

캐시 파일을 저장할 디렉토리입니다.

deps ​

  • 타입: { optimizer?, ... }

의존성 해석 관련 설정입니다.

deps.optimizer 0.34.0+ ​

  • 타입: { ssr?, web? }
  • 참조: 종속성 최적화 옵션

종속성 최적화를 활성화합니다. 테스트가 많은 경우 성능 향상을 기대할 수 있습니다. 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 구성도 상속합니다 (웹의 경우 Vitest는 optimizeDeps를 확장하고 ssr의 경우 ssr.optimizeDeps를 확장합니다). deps.optimizer에서 include/exclude 옵션을 재정의하면 테스트를 실행할 때 optimizeDeps가 확장됩니다. Vitest는 exclude에 나열된 경우 include에서 동일한 옵션을 자동으로 제거합니다.

TIP

코드가 실제로 cacheDir 또는 test.cache.dir 디렉토리에 위치하므로 디버깅을 위해 node_modules 코드를 직접 편집할 수 없습니다. console.log 문으로 디버깅하려면 직접 편집하거나 deps.optimizer?.[mode].force 옵션으로 강제로 다시 번들링하세요.

deps.optimizer.{mode}.enabled ​

  • 타입: boolean
  • 기본값: Vitest 1.3.0 이후 false

종속성 최적화를 활성화합니다.

WARNING

이 옵션은 Vite 4.3.2 이상에서만 사용할 수 있습니다.

deps.web 0.34.2+ ​

  • 타입: { transformAssets?, ... }

변환 모드가 web으로 설정될 때 외부 파일에 적용되는 옵션입니다. 기본적으로 jsdom 및 happy-dom은 web 모드를 사용하는 반면 node 및 edge 환경은 ssr 변환 모드를 사용하므로 이러한 옵션은 해당 환경 내부의 파일에 영향을 미치지 않습니다.

일반적으로 node_modules 내부의 파일은 외부화되지만 이러한 옵션은 server.deps.external에 지정된 파일에도 영향을 미칩니다.

deps.web.transformAssets ​

  • 타입: boolean
  • 기본값: true

Vitest가 자산 파일(.png, .svg, .jpg 등)을 Vite가 브라우저에서 처리하는 방식과 동일하게 처리하고 해석할지 여부를 설정합니다.

쿼리가 지정되지 않은 경우 이 모듈에는 자산 경로와 동일한 기본 내보내기가 있습니다.

WARNING

현재 이 옵션은 vmThreads 및 vmForks 풀에서만 작동합니다.

deps.web.transformCss ​

  • 타입: boolean
  • 기본값: true

Vitest가 CSS(.css, .scss, .sass 등) 파일을 처리하고 Vite가 브라우저에서 하는 것처럼 해석해야 하는지 여부입니다.

CSS 파일이 css 옵션으로 비활성화된 경우 이 옵션은 ERR_UNKNOWN_FILE_EXTENSION 오류를 무시합니다.

WARNING

현재 이 옵션은 vmThreads 및 vmForks 풀에서만 작동합니다.

deps.web.transformGlobPattern ​

  • 타입: RegExp | RegExp[]
  • 기본값: []

변환해야 하는 외부 파일과 일치하는 정규식 패턴입니다.

기본적으로 node_modules 내부의 파일은 외부화되어 변환되지 않으며, CSS 또는 자산이 아닌 경우 해당 옵션이 비활성화되지 않은 경우에만 변환됩니다.

WARNING

현재 이 옵션은 vmThreads 및 vmForks 풀에서만 작동합니다.

deps.interopDefault ​

  • 타입: boolean
  • 기본값: true

CJS 모듈의 default export를 named export로 간주합니다. 일부 종속성은 CJS 모듈만 번들링하고 Node.js가 require 대신 import 구문을 사용하여 패키지를 가져올 때 정적으로 분석할 수 있는 명명된 내보내기를 사용하지 않습니다. 명명된 내보내기를 사용하여 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의 동작 방식에 영향을 미칩니다. factory가 제공되지 않고 mock하려는 대상의 경로가 moduleDirectories 값 중 하나와 일치하면, Vitest는 프로젝트 root에서 __mocks__ 폴더를 검색하여 mock을 찾습니다.

이 옵션은 종속성을 외부화할 때 파일을 모듈로 간주해야 하는지 여부에도 영향을 미칩니다. 기본적으로 Vitest는 Vite 변환 단계를 우회하여 네이티브 Node.js로 외부 모듈을 가져옵니다.

이 옵션을 설정하면 기본 설정이 덮어쓰기됩니다. 패키지에 대해 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.

benchmark.outputJson 1.6.0+ ​

  • 타입: string | undefined
  • 기본값: undefined

벤치마크 결과를 저장할 파일의 경로입니다. 나중에 --compare 옵션에 사용할 수 있습니다.

예를 들어:

sh
# save main branch's result
git checkout main
vitest bench --outputJson main.json

# change a branch and compare against main
git checkout feature
vitest bench --compare main.json

benchmark.compare 1.6.0+ ​

  • 타입: string | undefined
  • 기본값: undefined

현재 실행 결과와 비교할 이전 벤치마크 결과 파일의 경로입니다.

alias ​

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

테스트 실행 시 사용할 사용자 지정 별칭을 정의합니다. resolve.alias의 별칭과 병합됩니다.

WARNING

Vitest는 특정 함정이 있는 Vite SSR 기본 요소를 사용하여 테스트를 실행합니다.

  1. 별칭은 인라인 모듈(모든 소스 코드는 기본적으로 인라인됨)에 의해 import 키워드로 직접 가져온 모듈에만 영향을 미칩니다.
  2. Vitest는 require 호출에 대한 별칭 지정을 지원하지 않습니다.
  3. 외부 의존성(예: react -> preact)에 alias를 지정하는 경우, externalize된 의존성에도 적용되도록 실제 node_modules 패키지에 alias를 지정하는 것이 좋습니다. Yarn과 pnpm은 모두 npm: 접두사를 통해 별칭 지정을 지원합니다.

globals ​

  • 타입: boolean
  • 기본값: false
  • CLI: --globals, --globals=false

기본적으로 vitest는 명확성을 위해 전역 API를 제공하지 않습니다. Jest와 같이 API를 전역적으로 사용하려면 CLI에 --globals 옵션을 전달하거나 구성에 globals: true를 추가할 수 있습니다.

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

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

TypeScript에서 전역 API를 사용하려면 tsconfig.json 파일의 types 필드에 vitest/globals를 추가하세요.

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

프로젝트에서 이미 unplugin-auto-import를 사용하고 있는 경우 해당 API를 자동 가져오는 데 직접 사용할 수도 있습니다.

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

export default defineConfig({
  plugins: [
    AutoImport({
      imports: ['vitest'],
      dts: true, // generate TypeScript declaration
    }),
  ],
});

environment ​

  • 타입: 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
  • 기본값: 'node'
  • CLI: --environment=<env>

테스트에 사용할 환경을 설정합니다. Vitest의 기본 환경은 Node.js입니다. 웹 애플리케이션을 테스트하는 경우, 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와의 호환성을 위해 @jest-environment도 사용할 수 있습니다.

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

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

--isolate=false 플래그를 사용하여 Vitest를 실행하면, 테스트는 node, jsdom, happy-dom, edge-runtime, custom environments 순서로 실행됩니다. 즉, 동일한 환경을 사용하는 테스트는 그룹화되어 순차적으로 실행됩니다.

0.23.0 버전부터는 사용자 정의 환경을 정의할 수 있습니다. 내장 환경이 아닌 사용자 정의 환경을 사용하는 경우, Vitest는 vitest-environment-${name} 패키지를 로드하려고 시도합니다. 해당 패키지는 Environment 타입의 객체를 export해야 합니다.

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도 노출합니다. 환경 확장에 대한 자세한 내용은 가이드에서 확인할 수 있습니다.

TIP

Vitest 1.3.0부터 jsdom 환경은 현재 JSDOM 인스턴스와 동일한 jsdom 전역 변수를 노출합니다. TypeScript가 이를 인식하도록 하려면 해당 환경을 사용할 때 tsconfig.json에 vitest/jsdom을 추가하십시오.

json
{
  "compilerOptions": {
    "types": ["vitest/jsdom"]
  }
}

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 확장자를 가진 tests/ 디렉토리 내의 모든 테스트는 edge-runtime 환경에서 실행됩니다.
      ['**/*.edge.test.ts', 'edge-runtime'],
      // ...
    ],
  },
});

poolMatchGlobs 0.29.4+ ​

  • 타입: [string, 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'][]
  • 기본값: []

glob 패턴에 따라 테스트를 실행할 풀을 자동으로 할당합니다. 먼저 일치하는 항목이 적용됩니다.

예시:

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

export default defineConfig({
  test: {
    poolMatchGlobs: [
      // "worker-specific" 디렉토리 내의 모든 테스트는 `--pool=threads`를 활성화한 것처럼 worker 내부에서 실행됩니다.
      ['**/tests/worker-specific/**', 'threads'],
      // "browser" 디렉토리 내의 모든 테스트는 실제 브라우저에서 실행됩니다.
      ['**/tests/browser/**', 'browser'],
      // 다른 glob 패턴이 지정되지 않은 경우, 나머지 모든 테스트는 "browser.enabled" 및 "threads" 옵션에 따라 실행됩니다.
      // ...
    ],
  },
});

update* ​

  • 타입: boolean
  • 기본값: false
  • CLI: -u, --update, --update=false

스냅샷 파일을 업데이트합니다. 변경된 모든 스냅샷을 업데이트하고 더 이상 사용되지 않는 스냅샷을 삭제합니다.

watch* ​

  • 타입: boolean
  • 기본값: !process.env.CI
  • CLI: -w, --watch, --watch=false

watch 모드를 활성화합니다.

root ​

  • 타입: string
  • CLI: -r <path>, --root=<path>

프로젝트 루트 디렉토리를 지정합니다.

reporters* ​

  • 타입: Reporter | Reporter[]
  • 기본값: 'default'
  • CLI: --reporter=<name>, --reporter=<name1> --reporter=<name2>

테스트 결과를 출력하는 사용자 정의 리포터를 지정합니다. 리포터는 Reporter 인스턴스, 내장 리포터를 선택하는 문자열, 또는 사용자 정의 구현 경로(예: './path/to/reporter.ts', '@scope/reporter')가 될 수 있습니다.

outputFile* ​

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

--reporter=json, --reporter=html 또는 --reporter=junit 옵션이 지정된 경우 테스트 결과를 파일에 저장합니다. 문자열 대신 객체를 제공하면 여러 리포터를 사용할 때 각 리포터에 대한 출력 파일을 개별적으로 정의할 수 있습니다.

pool* 1.0.0+ ​

  • 타입: 'threads' | 'forks' | 'vmThreads' | 'vmForks'
  • 기본값: 'threads'
  • CLI: --pool=threads

테스트를 실행하는 데 사용되는 풀을 지정합니다.

threads* ​

tinypool (Piscina의 경량 포크)을 사용하여 멀티 스레딩을 활성화합니다. 스레드 풀을 사용하는 경우 process.chdir()와 같은 프로세스 관련 API는 사용할 수 없습니다. Prisma, bcrypt, canvas 등 네이티브 언어로 작성된 일부 라이브러리는 멀티 스레드 환경에서 세그먼트 오류를 일으킬 수 있습니다. 이러한 경우에는 forks 풀을 대신 사용하는 것이 좋습니다.

forks* ​

threads 풀과 유사하지만 tinypool을 통해 worker_threads 대신 child_process를 사용합니다. 테스트와 메인 프로세스 간의 통신 속도는 threads 풀만큼 빠르지 않습니다. process.chdir()와 같은 프로세스 관련 API는 forks 풀에서 사용할 수 있습니다.

vmThreads* ​

threads 풀에서 샌드박스된 환경인 VM 컨텍스트를 사용하여 테스트를 실행합니다.

이렇게 하면 테스트 실행 속도는 빨라지지만, ESM 코드 실행 시 VM 모듈이 불안정해질 수 있습니다. 테스트 시 메모리 누수가 발생할 수 있으므로, poolOptions.vmThreads.memoryLimit 값을 직접 설정하는 것이 좋습니다.

WARNING

샌드박스에서 코드를 실행하면 몇 가지 장점(더 빠른 테스트)이 있지만 여러 가지 단점도 있습니다.

  • (fs, path 등) 네이티브 모듈 내부의 전역 변수는 테스트 환경의 전역 변수와 다릅니다. 따라서, 이러한 네이티브 모듈에서 발생하는 오류는 코드에서 사용되는 Error 생성자와 다른 생성자를 참조하게 됩니다.
ts
try {
  fs.writeFileSync('/doesnt exist');
} catch (err) {
  console.log(err instanceof Error); // false
}
  • ES 모듈을 가져오면 무기한 캐시되어 컨텍스트(테스트 파일)가 많은 경우 메모리 누수가 발생합니다. Node.js에는 해당 캐시를 지우는 API가 없습니다.
  • 샌드박스 환경에서 전역 변수에 액세스하는 데 더 오래 걸립니다.

이 옵션을 사용할 때는 이러한 문제를 유의해야 합니다. Vitest 팀은 이러한 문제를 해결할 수 없습니다.

vmForks* ​

vmThreads 풀과 유사하지만 tinypool을 통해 worker_threads 대신 child_process를 사용합니다. 테스트와 메인 프로세스 간의 통신 속도는 vmThreads 풀만큼 빠르지 않습니다. process.chdir()와 같은 프로세스 관련 API는 vmForks 풀에서 사용할 수 있습니다. 이 풀에는 vmThreads에 나열된 것과 동일한 단점이 있습니다.

poolOptions* 1.0.0+ ​

  • 타입: Record<'threads' | 'forks' | 'vmThreads' | 'vmForks', {}>
  • 기본값: {}

각 풀에 대한 옵션을 설정합니다.

poolOptions.threads ​

threads 풀에 대한 옵션입니다.

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

export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        // 스레드 관련 옵션
      },
    },
  },
});
poolOptions.threads.maxThreads* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최대 스레드 수를 지정합니다. VITEST_MAX_THREADS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.threads.minThreads* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최소 스레드 수를 지정합니다. VITEST_MIN_THREADS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.threads.singleThread ​
  • 타입: boolean
  • 기본값: false

단일 작업자 스레드 내에서 동일한 환경으로 모든 테스트를 실행합니다. 이렇게 하면 내장 모듈 격리가 비활성화되지만(소스 코드 또는 인라인된 코드는 각 테스트에 대해 다시 평가됨) 테스트 성능을 향상시킬 수 있습니다.

WARNING

이 옵션은 테스트를 순차적으로 실행하도록 강제하지만 Jest의 --runInBand와는 다릅니다. Vitest는 테스트를 병렬로 실행할 뿐만 아니라 격리를 제공하기 위해 작업자를 사용합니다. 이 옵션을 비활성화하면 테스트가 순차적으로 실행되지만 동일한 전역 컨텍스트에서 실행되므로 직접 격리를 제공해야 합니다.

전역 상태(프런트엔드 프레임워크는 일반적으로 그러함)에 의존하거나 코드가 각 테스트에 대해 별도로 정의된 환경에 의존하는 경우 문제가 발생할 수 있습니다. 그러나 전역 상태에 반드시 의존하지 않거나 쉽게 우회할 수 있는 테스트의 경우 속도 향상(최대 3배 더 빠름)을 얻을 수 있습니다.

poolOptions.threads.useAtomics* ​
  • 타입: boolean
  • 기본값: false

Atomics를 사용하여 스레드를 동기화합니다.

이렇게 하면 경우에 따라 성능이 향상될 수 있지만 구버전 Node에서는 세그먼테이션 오류가 발생할 수 있습니다.

poolOptions.threads.isolate ​
  • 타입: boolean
  • 기본값: true

각 테스트 파일에 대한 환경을 격리합니다.

poolOptions.threads.execArgv* ​
  • 타입: string[]
  • 기본값: []

스레드에서 node에 추가 인수를 전달합니다. 자세한 내용은 명령줄 API | Node.js를 참조하십시오.

WARNING

일부 옵션은 작업자를 충돌시킬 수 있으므로(예: --prof, --title) 사용할 때 주의하십시오. https://github.com/nodejs/node/issues/41103을 참조하십시오.

poolOptions.forks ​

forks 풀에 대한 옵션입니다.

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

export default defineConfig({
  test: {
    poolOptions: {
      forks: {
        // 포크 관련 옵션
      },
    },
  },
});
poolOptions.forks.maxForks* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최대 포크 수를 지정합니다.

poolOptions.forks.minForks* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최소 포크 수를 지정합니다.

poolOptions.forks.isolate ​
  • 타입: boolean
  • 기본값: true

각 테스트 파일에 대한 환경을 격리합니다.

poolOptions.forks.singleFork ​
  • 타입: boolean
  • 기본값: false

단일 자식 프로세스 내에서 동일한 환경으로 모든 테스트를 실행합니다. 이렇게 하면 내장 모듈 격리가 비활성화되지만(소스 코드 또는 인라인된 코드는 각 테스트에 대해 다시 평가됨) 테스트 성능을 향상시킬 수 있습니다.

WARNING

이 옵션은 테스트를 순차적으로 실행하도록 강제하지만 Jest의 --runInBand와는 다릅니다. Vitest는 테스트를 병렬로 실행할 뿐만 아니라 격리를 제공하기 위해 자식 프로세스를 사용합니다. 이 옵션을 비활성화하면 테스트가 순차적으로 실행되지만 동일한 전역 컨텍스트에서 실행되므로 직접 격리를 제공해야 합니다.

전역 상태(프런트엔드 프레임워크는 일반적으로 그러함)에 의존하거나 코드가 각 테스트에 대해 별도로 정의된 환경에 의존하는 경우 문제가 발생할 수 있습니다. 그러나 전역 상태에 반드시 의존하지 않거나 쉽게 우회할 수 있는 테스트의 경우 속도 향상(최대 3배 더 빠름)을 얻을 수 있습니다.

poolOptions.forks.execArgv* ​
  • 타입: string[]
  • 기본값: []

자식 프로세스에서 node 프로세스에 추가 인수를 전달합니다. 자세한 내용은 명령줄 API | Node.js를 참조하십시오.

WARNING

일부 옵션은 작업자를 충돌시킬 수 있으므로(예: --prof, --title) 사용할 때 주의하십시오. https://github.com/nodejs/node/issues/41103을 참조하십시오.

poolOptions.vmThreads ​

vmThreads 풀에 대한 옵션입니다.

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

export default defineConfig({
  test: {
    poolOptions: {
      vmThreads: {
        // VM 스레드 관련 옵션
      },
    },
  },
});
poolOptions.vmThreads.maxThreads* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최대 스레드 수를 지정합니다. VITEST_MAX_THREADS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.vmThreads.minThreads* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최소 스레드 수를 지정합니다. VITEST_MIN_THREADS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.vmThreads.memoryLimit* ​
  • 타입: string | number
  • 기본값: 1 / CPU Cores

작업자가 재활용되기 전에 메모리 제한을 지정합니다. 이 값은 환경에 따라 크게 달라지므로 기본값에 의존하는 대신 수동으로 지정하는 것이 좋습니다.

TIP

구현은 Jest의 workerIdleMemoryLimit를 기반으로 합니다.

제한은 다양한 방식으로 지정할 수 있으며, 결과 값은 Math.floor를 통해 정수 값으로 변환됩니다.

  • <= 1 - 값은 시스템 메모리의 백분율로 간주됩니다. 따라서 0.5는 작업자의 메모리 제한을 총 시스템 메모리의 절반으로 설정합니다.

  • \> 1 - 고정 바이트 값으로 간주됩니다. 이전 규칙 때문에 1바이트 값을 원하면(이유는 모르겠지만) 1.1을 사용할 수 있습니다.

  • 단위 포함

    • 50% - 위와 같이 총 시스템 메모리의 백분율입니다.

    • 100KB, 65MB 등 - 고정 메모리 제한을 나타내는 단위 포함.

      • K / KB: 킬로바이트 (x1000)
      • KiB: 키비바이트 (1,024바이트)
      • M / MB: 메가바이트
      • MiB: 메비바이트 (1,024키비바이트)
      • G / GB: 기가바이트
      • GiB: 기비바이트 (1,024메비바이트)

WARNING

잘못된 시스템 메모리가 보고되어 Linux CircleCI 환경에서는 백분율 기반 메모리 제한이 작동하지 않습니다.

poolOptions.vmThreads.useAtomics* ​
  • 타입: boolean
  • 기본값: false

Atomics를 사용하여 스레드를 동기화합니다.

이렇게 하면 경우에 따라 성능이 향상될 수 있지만 구버전 Node에서는 세그먼테이션 오류가 발생할 수 있습니다.

poolOptions.vmThreads.execArgv* ​
  • 타입: string[]
  • 기본값: []

VM 컨텍스트에서 node 프로세스에 추가 인수를 전달합니다. 자세한 내용은 명령줄 API | Node.js를 참조하십시오.

WARNING

일부 옵션은 작업자를 충돌시킬 수 있으므로(예: --prof, --title) 사용할 때 주의하십시오. https://github.com/nodejs/node/issues/41103을 참조하십시오.

poolOptions.vmForks ​

vmForks 풀에 대한 옵션입니다.

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

export default defineConfig({
  test: {
    poolOptions: {
      vmForks: {
        // VM 포크 관련 옵션
      },
    },
  },
});
poolOptions.vmForks.maxForks* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최대 스레드 수를 지정합니다. VITEST_MAX_FORKS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.vmForks.minForks* ​
  • 타입: number
  • 기본값: 사용 가능한 CPU 코어 수

최소 스레드 수를 지정합니다. VITEST_MIN_FORKS 환경 변수를 사용하여 설정할 수도 있습니다.

poolOptions.vmForks.memoryLimit* ​
  • 타입: string | number
  • 기본값: 1 / CPU Cores

작업자가 재활용되기 전에 메모리 제한을 지정합니다. 이 값은 환경에 따라 크게 달라지므로 기본값에 의존하는 대신 수동으로 지정하는 것이 좋습니다. 값 계산 방법은 poolOptions.vmThreads.memoryLimit 부분을 참고하십시오.

poolOptions.vmForks.execArgv* ​
  • 타입: string[]
  • 기본값: []

VM 컨텍스트에서 node 프로세스에 추가 인수를 전달합니다. 자세한 내용은 명령줄 API | Node.js를 참조하십시오.

WARNING

일부 옵션은 작업자를 충돌시킬 수 있으므로(예: --prof, --title) 사용할 때 주의하십시오. https://github.com/nodejs/node/issues/41103을 참조하십시오.

fileParallelism 1.1.0+ ​

  • 타입: boolean
  • 기본값: true
  • CLI: --no-file-parallelism, --fileParallelism=false

테스트 파일을 병렬로 실행할지 여부를 설정하는 옵션입니다. false로 설정하면 maxWorkers 및 minWorkers 옵션이 1로 고정됩니다.

TIP

이 옵션은 동일한 파일 내에서 실행되는 테스트에는 영향을 주지 않습니다. 해당 테스트를 병렬로 실행하려면 describe 또는 구성에서 concurrent 옵션을 사용하세요.

maxWorkers 1.1.0+ ​

  • 타입: number

테스트 실행에 사용할 최대 worker 수입니다. poolOptions.{threads,vmThreads}.maxThreads/poolOptions.forks.maxForks 설정이 이 값보다 우선합니다.

minWorkers 1.1.0+ ​

  • 타입: number

테스트 실행에 사용할 최소 worker 수입니다. poolOptions.{threads,vmThreads}.minThreads/poolOptions.forks.minForks 설정이 이 값보다 우선합니다.

testTimeout ​

  • 타입: number
  • 기본값: 5000
  • CLI: --test-timeout=5000, --testTimeout=5000

테스트의 기본 제한 시간(밀리초)입니다.

hookTimeout ​

  • 타입: number
  • 기본값: 10000
  • CLI: --hook-timeout=10000, --hookTimeout=10000

훅(hook)의 기본 제한 시간(밀리초)입니다.

teardownTimeout* ​

  • 타입: number
  • 기본값: 10000
  • CLI: --teardown-timeout=5000, --teardownTimeout=5000

Vitest 종료 시 종료를 기다리는 기본 제한 시간(밀리초)입니다.

silent* ​

  • 타입: boolean
  • 기본값: false
  • CLI: --silent, --silent=false

테스트 실행 중 콘솔 출력을 숨깁니다.

setupFiles ​

  • 타입: string | string[]

설정 파일의 경로입니다. 각 테스트 파일 실행 전에 실행됩니다.

INFO

설정 파일을 변경하면 모든 테스트가 다시 실행됩니다.

스레드를 구분하기 위해 내부적으로 process.env.VITEST_POOL_ID (정수 형태의 문자열)를 사용할 수 있습니다.

TIP

--isolate=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 이름의 함수를 export하거나, teardown 함수를 반환하는 default 함수를 export할 수 있습니다(예시).

INFO

여러 개의 globalSetup 파일을 사용할 수 있습니다. setup 함수는 순차적으로 실행되고, teardown 함수는 역순으로 실행됩니다.

WARNING

Vitest 1.0.0-beta 이후로 global setup은 실행 중인 테스트가 하나 이상 있는 경우에만 실행됩니다. 즉, 테스트 파일이 변경된 후 watch 모드에서 global setup이 실행되기 시작할 수 있습니다 (테스트 파일은 global setup이 완료될 때까지 실행을 기다립니다).

global setup은 다른 전역 범위에서 실행되므로 테스트는 여기에 정의된 변수에 접근할 수 없습니다. 그러나 1.0.0부터 provide 메서드를 통해 직렬화 가능한 데이터를 테스트에 전달할 수 있습니다.

js
export default function setup({ provide }) {
  provide('wsPort', 3000);
}
ts
import type { GlobalSetupContext } from 'vitest/node';

export default function setup({ provide }: GlobalSetupContext) {
  provide('wsPort', 3000);
}

// `provide`와 `inject` 메서드에 대한 타입 안전한 접근을 위해 `ProvidedContext` 타입을 확장할 수도 있습니다.
declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}
ts
import { inject } from 'vitest';

inject('wsPort') === 3000;

watchExclude* ​

  • 타입: string[]
  • 기본값: ['**/node_modules/**', '**/dist/**']
  • Deprecated: server.watch.ignored를 대신 사용하세요.

watch 재실행을 트리거하지 않도록 무시할 파일 경로의 glob 패턴입니다.

forceRerunTriggers* ​

  • 타입: string[]
  • 기본값: ['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']

전체 스위트의 재실행을 유발하는 파일 경로의 Glob 패턴입니다. --changed 인수와 함께 사용하면 git diff에서 해당 패턴에 맞는 파일이 발견될 경우 전체 테스트 스위트를 실행합니다.

Vite가 모듈 그래프를 구성할 수 없기 때문에 CLI 명령 호출을 테스트하는 경우에 유용합니다.

ts
test('execute a script', async () => {
  // Vite는 `dist/index.js`의 내용이 변경되어도 이 테스트를 다시 실행할 수 없습니다.
  await execa('node', ['dist/index.js']);
});

TIP

파일이 watchExclude에 의해 제외되지 않았는지 확인하십시오.

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 CLI 옵션으로 재정의할 수 있습니다.

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', '.marko']
  • 사용 가능한 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}?(-d).?(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 패턴으로 커버리지에서 제외할 파일 목록입니다.

이 옵션은 기본값을 모두 덮어씁니다. 새로운 제외 패턴을 추가하려면 기본값을 확장하여 사용하십시오.

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

export default defineConfig({
  test: {
    coverage: {
      exclude: ['**/custom-pattern/**', ...coverageConfigDefaults.exclude],
    },
  },
});

coverage.all ​

  • 타입: boolean
  • 기본값: true (Vitest 1.0.0 이후)
  • 사용 가능한 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>

커버리지 보고서를 저장할 디렉토리입니다.

WARNING

coverage.clean이 활성화된 경우 (기본값), Vitest는 테스트를 실행하기 전에 이 디렉토리를 삭제합니다.

HTML reporter의 출력에서 커버리지 보고서를 미리 보려면 이 옵션을 HTML 보고서 디렉토리의 하위 디렉토리로 설정해야 합니다 (예: ./html/coverage).

coverage.reporter ​

  • 타입: string | string[] | [string, {}][]
  • 기본값: ['text', 'html', 'clover', 'json']
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.reporter=<reporter>, --coverage.reporter=<reporter1> --coverage.reporter=<reporter2>

커버리지 보고서 생성에 사용할 리포터를 지정합니다. 모든 리포터에 대한 자세한 내용은 istanbul documentation을 참조하십시오. 리포터별 옵션에 대한 자세한 내용은 @types/istanbul-reporter를 참조하십시오.

리포터는 세 가지 유형으로 지정할 수 있습니다.

  • 단일 리포터: { reporter: 'html' }
  • 옵션이 없는 여러 리포터: { reporter: ['html', 'json'] }
  • 리포터 옵션이 있는 단일 또는 여러 리포터:
    ts
    {
      reporter: [
        ['lcov', { projectRoot: './src' }],
        ['json', { file: 'coverage.json' }],
        ['text'],
      ];
    }

Vitest 1.2.0부터 사용자 정의 커버리지 리포터를 사용할 수도 있습니다. 자세한 내용은 Guide - Custom Coverage Reporter를 참조하십시오.

ts
{
  reporter: [
    // NPM 패키지 이름으로 리포터 지정
    '@vitest/custom-coverage-reporter',
    ['@vitest/custom-coverage-reporter', { someOption: true }],

    // 로컬 경로로 리포터 지정
    '/absolute/path/to/custom-reporter.cjs',
    ['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
  ];
}

Vitest 0.31.0부터 Vitest UI에서 커버리지 보고서를 확인할 수 있습니다. 자세한 내용은 Vitest UI Coverage를 확인하십시오.

coverage.reportOnFailure 0.31.2+ ​

  • 타입: boolean
  • 기본값: false (Vitest 0.34.0 이후)
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.reportOnFailure, --coverage.reportOnFailure=false

테스트가 실패하더라도 커버리지 보고서를 생성합니다.

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% statement, branch 및 function 커버리지를 가진 파일을 표시하지 않습니다.

coverage.thresholds ​

커버리지 임계값에 대한 옵션

coverage.thresholds.lines ​
  • 타입: number
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.lines=<number>

라인 커버리지에 대한 전역 임계값입니다. 자세한 내용은 istanbul documentation을 참조하십시오.

coverage.thresholds.functions ​
  • 타입: number
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.functions=<number>

함수 커버리지에 대한 전역 임계값입니다. 자세한 내용은 istanbul documentation을 참조하십시오.

coverage.thresholds.branches ​
  • 타입: number
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.branches=<number>

분기 커버리지에 대한 전역 임계값입니다. 자세한 내용은 istanbul documentation을 참조하십시오.

coverage.thresholds.statements ​
  • 타입: number
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.statements=<number>

statements 커버리지에 대한 전역 임계값입니다. 자세한 내용은 istanbul documentation을 참조하십시오.

coverage.thresholds.perFile ​
  • 타입: boolean
  • 기본값: false
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.perFile, --coverage.thresholds.perFile=false

파일별로 임계값을 검사합니다.

coverage.thresholds.autoUpdate ​
  • 타입: boolean
  • 기본값: false
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.autoUpdate=<boolean>

현재 커버리지율이 설정된 임계값보다 높을 경우, lines, functions, branches, statements의 임계값을 자동으로 설정 파일에 업데이트합니다. 이 옵션은 커버리지가 향상될 때 임계값을 유지하는 데 유용합니다.

coverage.thresholds.100 ​
  • 타입: boolean
  • 기본값: false
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.100, --coverage.thresholds.100=false

전역 임계값을 100으로 설정합니다. --coverage.thresholds.lines 100 --coverage.thresholds.functions 100 --coverage.thresholds.branches 100 --coverage.thresholds.statements 100을 한 번에 설정하는 단축 옵션입니다.

coverage.thresholds[glob-pattern] ​
  • 타입: { statements?: number functions?: number branches?: number lines?: number }
  • 기본값: undefined
  • 사용 가능한 provider: 'v8' | 'istanbul'

glob 패턴과 일치하는 파일에 대한 임계값을 설정합니다.

ts
{
  coverage: {
    thresholds: {
      // Thresholds for all files
      functions: 95,
      branches: 70,

      // Thresholds for matching glob pattern
      'src/utils/**.ts': {
        statements: 95,
        functions: 90,
        branches: 85,
        lines: 80,
      },

      // 이 패턴에 해당하는 파일은 라인 임계값만 적용됩니다.
      // 전역 임계값은 상속되지 않습니다.
      '**/math.ts': {
        lines: 100,
      }
    }
  }
}

coverage.ignoreEmptyLines ​

  • 타입: boolean
  • 기본값: false
  • 사용 가능한 provider: 'v8'
  • CLI: --coverage.ignoreEmptyLines=<boolean>

빈 줄, 주석 및 기타 비 런타임 코드(예: TypeScript 타입)를 무시합니다.

이 옵션은 사용된 컴파일러가 트랜스파일된 코드에서 주석 및 기타 비 런타임 코드를 제거하는 경우에만 작동합니다. 기본적으로 Vite는 .ts, .tsx 및 .jsx 파일에서 주석과 Typescript 타입을 제거하는 ESBuild를 사용합니다.

다른 파일에도 ESBuild를 적용하려면 esbuild 옵션에서 해당 파일을 정의하십시오.

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

export default defineConfig({
  esbuild: {
    // ESBuild를 사용하여 모든 파일을 트랜스파일하여 코드 커버리지 측정 시 주석을 제외합니다.
    // `test.coverage.ignoreEmptyLines` 옵션을 사용하려면 필요합니다.
    include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
  },
  test: {
    coverage: {
      provider: 'v8',
      ignoreEmptyLines: true,
    },
  },
});

coverage.ignoreClassMethods ​

  • 타입: string[]
  • 기본값: []
  • 사용 가능한 provider: 'istanbul'
  • CLI: --coverage.ignoreClassMethods=<method>

커버리지 측정에서 제외할 클래스 메서드 이름의 배열을 설정합니다. 자세한 내용은 istanbul documentation을 참조하십시오.

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'
  • CLI: --coverage.watermarks.statements=50,80, --coverage.watermarks.branches=50,80

statements, lines, branches 및 functions에 대한 워터마크를 설정합니다. 자세한 내용은 istanbul documentation을 참조하십시오.

coverage.processingConcurrency ​

  • 타입: boolean
  • 기본값: Math.min(20, os.availableParallelism?.() ?? os.cpus().length)
  • 사용 가능한 provider: 'v8' | 'istanbul'
  • CLI: --coverage.processingConcurrency=<number>

커버리지 결과 처리 시 사용되는 최대 동시 작업 수입니다.

coverage.customProviderModule ​

  • 타입: string
  • 사용 가능한 provider: 'custom'
  • CLI: --coverage.customProviderModule=<path or module name>

사용자 정의 커버리지 provider 모듈의 모듈 이름 또는 경로를 지정합니다. 자세한 내용은 Guide - Custom Coverage Provider를 참조하십시오.

testNamePattern* ​

  • 타입: string | RegExp
  • CLI: -t <패턴>, --testNamePattern=<패턴>, --test-name-pattern=<패턴>

특정 패턴과 일치하는 이름을 가진 테스트만 실행합니다. 이 속성에 OnlyRunThis를 지정하면 테스트 이름에 OnlyRunThis가 포함되지 않은 테스트는 건너뜁니다.

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

// 실행됨
test('OnlyRunThis', () => {
  expect(true).toBe(true);
});

// 건너뜀
test('doNotRun', () => {
  expect(true).toBe(true);
});

open* ​

  • 타입: boolean
  • 기본값: !process.env.CI
  • CLI: --open, --open=false

Vitest UI를 엽니다 (개발 환경에서 유용).

api ​

  • 타입: boolean | number
  • 기본값: false
  • CLI: --api, --api.port, --api.host, --api.strictPort

API 서버를 실행할 포트를 지정합니다. true로 설정하면 기본 포트인 51204를 사용합니다.

browser 0.29.4+ ​

  • 타입: { enabled?, name?, provider?, headless?, api?, slowHijackESM? }
  • 기본값: { enabled: false, headless: process.env.CI, api: 63315 }
  • CLI: --browser, --browser=<이름>, --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

헤드리스 모드로 브라우저를 실행합니다. CI 환경에서 Vitest를 실행하는 경우 기본적으로 활성화됩니다.

browser.isolate ​

  • 타입: boolean
  • 기본값: true
  • CLI: --browser.isolate, --browser.isolate=false

각 테스트를 개별 iframe에서 실행합니다.

browser.fileParallelism 1.3.0+ ​

  • 타입: boolean
  • 기본값: fileParallelism과 동일
  • CLI: --browser.fileParallelism=false

모든 테스트 iframe을 동시에 생성하여 병렬로 실행합니다.

이 옵션을 활성화하면 화면에 여러 iframe이 동시에 표시되므로, 클릭 또는 호버링과 같은 상호 작용 API를 사용할 수 없습니다. 하지만 테스트가 이러한 API에 의존하지 않는 경우, 모든 테스트를 동시에 실행하는 것이 훨씬 빠를 수 있습니다.

TIP

browser.isolate=false를 사용하여 격리를 비활성화하더라도, 테스트 러너의 특성상 테스트 파일은 여전히 하나씩 실행됩니다.

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는 webdriverio(기본값) 및 playwright의 두 가지 Provider를 제공합니다. 사용자 정의 Provider는 default export를 사용하여 export해야 하며, 다음 인터페이스를 준수해야 합니다.

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

WARNING

이것은 라이브러리 개발자를 위한 고급 API입니다. 브라우저에서 테스트를 실행해야 하는 경우 browser 옵션을 사용하는 것이 좋습니다.

browser.providerOptions 1.0.0+ ​

  • 타입: BrowserProviderOptions

provider.initialize를 호출할 때 Provider에게 전달될 옵션입니다.

ts
export default defineConfig({
  test: {
    browser: {
      providerOptions: {
        launch: {
          devtools: true,
        },
      },
    },
  },
});

TIP

기본 제공 Provider를 사용할 때 더 나은 타입 안전성을 확보하려면 다음 타입 중 하나(사용 중인 Provider에 해당)를 tsconfig 파일의 compilerOptions.types 필드에 추가할 수 있습니다.

json
{
  "compilerOptions": {
    "types": [
      "@vitest/browser/providers/webdriverio",
      "@vitest/browser/providers/playwright"
    ]
  }
}

browser.slowHijackESM 0.31.0+ ​

  • 타입: boolean
  • 기본값: false

Node.js 환경에서 테스트를 실행할 때 Vitest는 자체 모듈 해결 방식을 사용하여 vi.mock 구문으로 모듈을 쉽게 모의(mock)할 수 있습니다. 그러나 브라우저에서 ES 모듈 해결을 완벽하게 복제하는 것은 어렵기 때문에 브라우저가 사용할 수 있도록 소스 파일을 변환해야 합니다.

이 옵션은 Node.js 내부에서 실행되는 테스트에는 영향을 미치지 않습니다.

vi.spyOn으로 ES 모듈을 스파이하는 경우, 이 실험적 기능을 활성화하여 모듈 내보내기를 스파이할 수 있습니다.

browser.indexScripts 1.6.0+ ​

  • 타입: BrowserScript[]
  • 기본값: []

테스트 iframe이 시작되기 전에 인덱스 HTML에 삽입해야 하는 사용자 정의 스크립트입니다. 이 HTML 문서는 iframe을 설정하는 역할만 하며, 실제 코드를 가져오지는 않습니다.

스크립트의 src 및 content는 Vite 플러그인에 의해 처리됩니다. 스크립트는 다음 인터페이스를 준수해야 합니다.

ts
export interface BrowserScript {
  /**
   * "content"가 제공되고 type이 "module"인 경우, 해당 스크립트의 식별자가 됩니다.
   *
   * TypeScript를 사용하는 경우 여기에 `.ts` 확장자를 추가할 수 있습니다 (예: `.ts`).
   * @default `injected-${index}.js`
   */
  id?: string;
  /**
   * 삽입할 JavaScript 콘텐츠입니다. 이 문자열은 타입이 "module"인 경우 Vite 플러그인에 의해 처리됩니다.
   *
   * `id`를 사용하여 Vite에 파일 확장자에 대한 힌트를 제공할 수 있습니다.
   */
  content?: string;
  /**
   * 스크립트 경로입니다. 이 값은 Vite에 의해 확인되므로 노드 모듈 또는 파일 경로가 될 수 있습니다.
   */
  src?: string;
  /**
   * 스크립트를 비동기적으로 로드해야 하는 경우.
   */
  async?: boolean;
  /**
   * 스크립트 타입입니다.
   * @default 'module'
   */
  type?: string;
}

browser.testerScripts 1.6.0+ ​

  • 타입: BrowserScript[]
  • 기본값: []

테스트 환경이 시작되기 전에 테스터 HTML에 삽입해야 하는 사용자 정의 스크립트입니다. 이는 Vitest 브라우저 구현에 필요한 폴리필(polyfill)을 삽입하는 데 유용합니다. 거의 모든 경우에 이 대신 setupFiles를 사용하는 것이 좋습니다.

스크립트의 src 및 content는 Vite 플러그인에 의해 처리됩니다.

clearMocks ​

  • 타입: boolean
  • 기본값: false

각 테스트를 실행하기 전에 모든 spy 객체에 대해 .mockClear()를 호출합니다. 이렇게 하면 모의(mock) 기록이 지워지지만, 구현은 기본값으로 재설정되지 않습니다.

mockReset ​

  • 타입: boolean
  • 기본값: false

각 테스트를 실행하기 전에 모든 spy 객체에 대해 .mockReset()를 호출합니다. 이렇게 하면 모의(mock) 기록이 지워지고 구현이 빈 함수로 재설정됩니다 ( undefined를 반환).

restoreMocks ​

  • 타입: boolean
  • 기본값: false

각 테스트를 실행하기 전에 모든 spy 객체에 대해 .mockRestore()를 호출합니다. 이렇게 하면 모의(mock) 기록이 지워지고 구현이 원래대로 재설정됩니다.

unstubEnvs 0.26.0+ ​

  • 타입: boolean
  • 기본값: false

각 테스트를 실행하기 전에 vi.unstubAllEnvs를 호출합니다.

unstubGlobals 0.26.0+ ​

  • 타입: boolean
  • 기본값: false

각 테스트를 실행하기 전에 vi.unstubAllGlobals를 호출합니다.

testTransformMode 0.34.0+ ​

  • 타입: { web?, ssr? }

glob 패턴과 일치하는 테스트 내에서 import된 모든 모듈에 대한 변환 방식을 결정합니다. 기본적으로 환경에 따라 결정됩니다. 예를 들어 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으로 전달됩니다.

TIP

이 객체의 plugins 필드는 무시됩니다.

pretty-format 플러그인을 통해 스냅샷 직렬 변환기를 확장해야 하는 경우, expect.addSnapshotSerializer API 또는 snapshotSerializers 옵션을 사용하십시오.

snapshotSerializers* 1.3.0+ ​

  • 타입: string[]
  • 기본값: []

사용자 정의 스냅샷 직렬 변환기를 추가하려는 경우 유용한, 스냅샷 테스트를 위한 스냅샷 직렬 변환기 모듈 경로 목록입니다. 자세한 내용은 사용자 정의 직렬 변환기를 참조하십시오.

resolveSnapshotPath* ​

  • 타입: (testPath: string, snapExtension: string) => string
  • 기본값: 스냅샷 파일을 __snapshots__ 디렉토리에 저장합니다.

기본 스냅샷 경로를 재정의합니다. 예를 들어 테스트 파일 옆에 스냅샷을 저장하려면:

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

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

allowOnly ​

  • 타입: boolean
  • 기본값: !process.env.CI
  • CLI: --allowOnly, --allowOnly=false

only로 표시된 테스트 및 스위트(Suite)만 실행하도록 허용합니다.

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 모듈은 런타임에 영향을 주지 않는 프록시 객체를 반환합니다.

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 처리가 활성화된 경우 css.modules.generateScopeName 메서드를 준수합니다. 기본적으로 파일 이름은 _${name}_${hash} 형식으로 생성되며, 여기서 해시는 파일 이름과 파일 내용을 포함합니다.
  • non-scoped: 클래스 이름은 해시되지 않습니다.

WARNING

기본적으로 Vitest는 CSS 모듈 처리를 우회하는 프록시를 내보냅니다. 클래스에서 CSS 속성에 의존하는 경우 include 옵션을 사용하여 CSS 처리를 활성화해야 합니다.

maxConcurrency ​

  • 타입: number
  • 기본값: 5
  • CLI: --max-concurrency=10, --maxConcurrency=10

test.concurrent로 표시된 테스트가 동시에 실행될 수 있는 최대 개수입니다.

이 제한을 초과하는 테스트는 사용 가능한 슬롯이 생길 때까지 대기열에 추가되어 실행을 기다립니다.

cache* ​

  • 타입: false
  • CLI: --no-cache, --cache=false

캐시 기능을 비활성화하려면 이 옵션을 사용합니다. 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 | { files?, tests? }
  • 기본값: false
  • CLI: --sequence.shuffle, --sequence.shuffle=false

파일과 테스트를 무작위로 실행하려면 이 옵션 또는 CLI 인수 --sequence.shuffle을 사용하여 활성화할 수 있습니다.

Vitest는 일반적으로 캐시를 사용하여 테스트를 정렬하므로, 실행 시간이 오래 걸리는 테스트가 먼저 시작됩니다. 이는 테스트 실행 속도를 향상시킵니다. 파일 및 테스트가 임의의 순서로 실행되면 이러한 성능 향상은 사라지지만, 이전에 실행된 테스트에 의존하는 테스트를 찾는 데 도움이 될 수 있습니다.

sequence.shuffle.files 1.4.0+ ​

  • 타입: boolean
  • 기본값: false
  • CLI: --sequence.shuffle.files, --sequence.shuffle.files=false

파일의 순서를 무작위화할지 설정합니다. 이 옵션을 활성화하면 실행 시간이 오래 걸리는 테스트가 먼저 시작되지 않습니다.

sequence.shuffle.tests 1.4.0+ ​

  • 타입: boolean
  • 기본값: false
  • CLI: --sequence.shuffle.tests, --sequence.shuffle.tests=false

테스트의 순서를 무작위화할지 여부입니다.

sequence.concurrent 0.32.2+ ​

  • 타입: boolean
  • 기본값: false
  • CLI: --sequence.concurrent, --sequence.concurrent=false

테스트를 병렬로 실행하려면 이 옵션 또는 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은 훅을 단일 그룹으로 묶어 병렬로 실행합니다 (상위 스위트의 훅은 현재 스위트의 훅보다 먼저 실행됨).

TIP

이 옵션은 onTestFinished에 영향을 주지 않습니다. onTestFinished는 항상 역순으로 호출됩니다.

sequence.setupFiles 0.29.3+ ​

  • 타입: 'list' | 'parallel'
  • 기본값: 'parallel'
  • CLI: --sequence.setupFiles=<value>

설정 파일이 실행되는 순서를 변경합니다.

  • list는 설정 파일을 정의된 순서대로 실행합니다.
  • parallel은 설정 파일을 병렬로 실행합니다.

typecheck ​

타입 검사 테스트 환경을 구성하기 위한 옵션입니다.

typecheck.enabled 1.0.0+ ​

  • 타입: boolean
  • 기본값: false
  • CLI: --typecheck, --typecheck.enabled

일반 테스트와 함께 타입 검사를 활성화합니다.

typecheck.only 1.0.0+ ​

  • 타입: boolean
  • 기본값: false
  • CLI: --typecheck.only

타입 검사가 활성화된 경우 타입 검사 테스트만 실행합니다. CLI를 사용하는 경우 이 옵션은 자동으로 타입 검사를 활성화합니다.

typecheck.checker ​

  • 타입: 'tsc' | 'vue-tsc' | string
  • 기본값: tsc

타입 검사에 사용할 도구입니다. Vitest는 타입에 따라 구문 분석을 용이하게 하기 위해 특정 매개변수로 프로세스를 생성합니다. 검사기는 tsc와 동일한 출력 형식을 구현해야 합니다.

타입 검사기를 사용하려면 해당 패키지를 설치해야 합니다.

  • 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
  • CLI: --slow-test-threshold=<number>, --slowTestThreshold=<number>

테스트가 느린 것으로 간주되어 결과에 보고되는 데 걸리는 시간(밀리초)입니다.

chaiConfig 0.30.0+ ​

  • 타입: { includeStack?, showDiff?, truncateThreshold? }
  • 기본값: { includeStack: false, showDiff: true, truncateThreshold: 40 }

Chai 구성과 동일합니다.

chaiConfig.includeStack ​

  • 타입: boolean
  • 기본값: false

Assertion 오류 메시지에 스택 추적이 포함될지 여부에 영향을 미칩니다. 기본값인 false는 오류 메시지에서 스택 추적을 숨깁니다.

chaiConfig.showDiff ​

  • 타입: boolean
  • 기본값: true

showDiff 플래그가 AssertionErrors에 포함될지 여부를 결정합니다. false는 항상 false입니다. true는 어설션에서 차이점을 표시하도록 요청한 경우에만 true입니다.

chaiConfig.truncateThreshold ​

  • 타입: number
  • 기본값: 40

어설션 오류에서 실제 값과 예상 값에 대한 길이 임계값을 설정합니다. 이 임계값을 초과하면 (예: 큰 데이터 구조의 경우) 값은 [ Array(3) ] 또는 { Object (prop1, prop2) }와 같이 축약됩니다. 잘라내기를 완전히 비활성화하려면 0으로 설정하십시오.

이 구성 옵션은 test.each 제목과 어설션 오류 메시지 내부의 값을 축약하는 데 영향을 줍니다.

bail 0.31.0+ ​

  • 타입: number
  • 기본값: 0
  • CLI: --bail=<value>

지정된 수의 테스트가 실패하면 테스트 실행을 중단합니다.

기본적으로 Vitest는 일부 테스트가 실패하더라도 모든 테스트 케이스를 실행합니다. 이는 100% 성공적인 빌드만 필요하고, 테스트 실패 시 가능한 한 빨리 테스트 실행을 중단하려는 CI 환경에는 적합하지 않을 수 있습니다. bail 옵션을 사용하면 실패가 발생했을 때 더 많은 테스트를 실행하지 않도록 하여 CI 실행 속도를 높일 수 있습니다.

retry 0.32.3+ ​

  • 타입: number
  • 기본값: 0
  • CLI: --retry=<value>

테스트가 실패하면 지정된 횟수만큼 다시 시도합니다.

onConsoleLog* ​

  • 타입: (log: string, type: 'stdout' | 'stderr') => boolean | void

테스트에서 console.log에 대한 사용자 정의 핸들러입니다. false를 반환하면 Vitest는 해당 로그를 콘솔에 출력하지 않습니다.

외부 라이브러리의 로그를 필터링하는 데 유용합니다.

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

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

onStackTrace* 1.0.0+ ​

  • 타입: (error: Error, frame: ParsedStack) => boolean | void

오류 처리 시 각 스택 추적의 프레임에 필터링 함수를 적용합니다. 첫 번째 인수 error는 표준 Error와 동일한 속성을 가진 객체이지만 실제 인스턴스는 아닙니다.

타사 라이브러리의 스택 추적 프레임을 필터링하는 데 유용할 수 있습니다.

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

export default defineConfig({
  test: {
    onStackTrace(error: Error, { file }: ParsedStack): boolean | void {
      // ReferenceError가 발생한 경우 전체 스택을 표시합니다.
      if (error.name === 'ReferenceError') return;

      // 타사 라이브러리의 모든 프레임을 제외합니다.
      if (file.includes('node_modules')) return false;
    },
  },
});

diff 0.34.5+ ​

  • 타입: string
  • CLI: --diff=<value>

diff 인터페이스를 생성하는 데 사용될 diff 구성 파일에 대한 경로입니다. diff 표시를 사용자 정의하려는 경우에 유용합니다.

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',
  },
});

diff.truncateThreshold ​

  • 타입: number
  • 기본값: 0

표시할 diff 결과의 최대 길이입니다. 이 임계값을 초과하는 diff는 잘립니다. 기본값 0을 사용하면 잘라내기가 적용되지 않습니다.

diff.truncateAnnotation ​

  • 타입: string
  • 기본값: '... Diff result is truncated'

diff 결과가 잘린 경우 diff 결과의 끝에 출력되는 주석입니다.

diff.truncateAnnotationColor ​

  • 타입: DiffOptionsColor = (arg: string) => string
  • 기본값: noColor = (string: string): string => string

잘라내기 주석의 색상을 설정합니다. 기본값은 색상 없이 출력됩니다.

fakeTimers ​

  • 타입: FakeTimerInstallOpts

vi.useFakeTimers()를 사용할 때 Vitest가 @sinon/fake-timers에 전달하는 옵션입니다.

fakeTimers.now ​

  • 타입: number | Date
  • 기본값: Date.now()

지정된 Unix epoch 시간으로 가짜 타이머를 설정합니다.

fakeTimers.toFake ​

  • 타입: ('setTimeout' | 'clearTimeout' | 'setImmediate' | 'clearImmediate' | 'setInterval' | 'clearInterval' | 'Date' | 'nextTick' | 'hrtime' | 'requestAnimationFrame' | 'cancelAnimationFrame' | 'requestIdleCallback' | 'cancelIdleCallback' | 'performance' | 'queueMicrotask')[]
  • 기본값: ['setTimeout', 'clearTimeout', 'setImmediate', 'clearImmediate', 'setInterval', 'clearInterval', 'Date']

모의 처리할 전역 메서드 및 API 이름 목록입니다.

setTimeout() 및 nextTick()만 모의하려면 이 속성을 ['setTimeout', 'nextTick']로 지정하십시오.

--pool=forks를 사용하여 node:child_process 내에서 Vitest를 실행하는 경우 nextTick 모의는 지원되지 않습니다. NodeJS는 node:child_process에서 내부적으로 process.nextTick을 사용하며, 이를 모의하면 오류가 발생합니다. --pool=threads를 사용하여 Vitest를 실행하는 경우 nextTick 모의가 지원됩니다.

fakeTimers.loopLimit ​

  • 타입: number
  • 기본값: 10_000

vi.runAllTimers()를 호출할 때 실행될 타이머의 최대 개수입니다.

fakeTimers.shouldAdvanceTime ​

  • 타입: boolean
  • 기본값: false

@sinonjs/fake-timers에게 실제 시스템 시간 변화에 따라 모의된 시간을 자동으로 증가시키도록 지시합니다 (예: 모의된 시간은 실제 시스템 시간의 20ms 변경마다 20ms씩 증가합니다).

fakeTimers.advanceTimeDelta ​

  • 타입: number
  • 기본값: 20

shouldAdvanceTime: true와 함께 사용하는 경우에만 관련됩니다. 실제 시스템 시간의 advanceTimeDelta ms 변경마다 모의된 시간을 advanceTimeDelta ms씩 증가시킵니다.

fakeTimers.shouldClearNativeTimers ​

  • 타입: boolean
  • 기본값: false

가짜 타이머가 해당 핸들러에 위임하여 "네이티브" (가짜가 아닌) 타이머를 지우도록 설정합니다. 이러한 타이머는 기본적으로 지워지지 않으므로 가짜 타이머 세션을 시작하기 전에 타이머가 존재한 경우 잠재적으로 예기치 않은 동작이 발생할 수 있습니다.

workspace* 1.1.0+ ​

  • 타입: string
  • CLI: --workspace=./file.js
  • 기본값: 구성 파일 또는 루트에 가까운 vitest.{workspace,projects}.{js,ts,json}

루트를 기준으로 워크스페이스 구성 파일에 대한 경로입니다.

isolate 1.1.0+ ​

  • 타입: boolean
  • 기본값: true
  • CLI: --no-isolate, --isolate=false

격리된 환경에서 테스트를 실행합니다. 이 옵션은 vmThreads 및 vmForks 풀에는 영향을 주지 않습니다.

일반적으로 node 환경의 프로젝트처럼, 코드에 부작용이 없다면 이 옵션을 비활성화하여 성능을 향상시킬 수 있습니다.

TIP

poolOptions 속성을 사용하여 특정 풀에 대한 격리를 비활성화할 수 있습니다.

includeTaskLocation 1.4.0+ ​

  • 타입: boolean
  • 기본값: false

Vitest API가 리포터로부터 작업을 받을 때 location 속성을 포함할지 설정합니다. 테스트가 많은 경우 약간의 성능 저하가 발생할 수 있습니다.

location 속성에는 원래 파일에서 test 또는 describe 위치에 해당하는 column 및 line 값이 포함됩니다.

TIP

이 옵션은 이를 사용하는 사용자 정의 코드가 없는 경우 아무런 효과가 없습니다.

snapshotEnvironment 1.6.0+ ​

  • 타입: string

사용자 정의 스냅샷 환경 구현에 대한 경로입니다. Node.js API를 지원하지 않는 환경에서 테스트를 실행하는 경우에 유용합니다. 이 옵션은 브라우저 실행 환경에는 영향을 주지 않습니다.

이 객체는 SnapshotEnvironment 인터페이스를 구현해야 하며, 스냅샷 파일을 확인, 읽기, 쓰기에 사용됩니다.

ts
export interface SnapshotEnvironment {
  getVersion: () => string;
  getHeader: () => string;
  resolvePath: (filepath: string) => Promise<string>;
  resolveRawPath: (testPath: string, rawPath: string) => Promise<string>;
  saveSnapshotFile: (filepath: string, snapshot: string) => Promise<void>;
  readSnapshotFile: (filepath: string) => Promise<string | null>;
  removeSnapshotFile: (filepath: string) => Promise<void>;
}

API의 일부만 재정의해야 하는 경우 vitest/snapshot 진입점에서 기본 VitestSnapshotEnvironment를 확장할 수 있습니다.

WARNING

이것은 저수준 옵션이므로 기본 Node.js API에 액세스할 수 없는 고급 경우에만 사용해야 합니다.

스냅샷 기능을 구성해야 하는 경우 snapshotFormat 또는 resolveSnapshotPath 옵션을 사용하십시오.

Pager
이전Vitest 구성 파일 관리

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team

https://v1.vitest.dev/config/

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team