Skip to content
Vitest 3
Main Navigation 가이드 & API구성브라우저 모드고급 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 구성하기

API

테스트 API 참조

Mock 함수

Vi

expect

expectTypeOf

assert

assertType

가이드

명령줄 인터페이스

테스트 필터링

테스트 프로젝트

리포터

커버리지

스냅샷

모킹

병렬 처리

타입 검사

Vitest UI

소스 내 테스팅

테스트 컨텍스트

테스트 어노테이션

테스트 환경

매처 확장하기

IDE 통합

디버깅

일반적인 오류

마이그레이션 가이드

Vitest 3.0으로 마이그레이션

Jest에서 마이그레이션

성능

테스트 성능 프로파일링

성능 향상

브라우저 모드

고급 API

다른 테스트 러너와의 비교

이 페이지에서

테스트 프로젝트 ​

샘플 프로젝트

GitHub - 온라인에서 실행하기

WARNING

이 기능은 workspace라고도 불렸습니다. workspace는 Vitest 3.2부터 더 이상 사용되지 않으며 projects 구성으로 대체되었습니다. 기능적으로는 동일합니다.

Vitest는 단일 Vitest 프로세스 내에서 여러 프로젝트 구성을 정의할 수 있는 기능을 제공합니다. 이 기능은 모노레포 설정에 특히 유용하며, resolve.alias, plugins, test.browser 등과 같은 다양한 구성으로 테스트를 실행하는 데도 활용될 수 있습니다.

프로젝트 정의 ​

루트 구성 파일에서 프로젝트를 정의할 수 있습니다:

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

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

프로젝트 구성은 인라인 구성, 파일 경로 또는 프로젝트를 참조하는 글로브 패턴으로 지정할 수 있습니다. 예를 들어, 프로젝트를 포함하는 packages라는 폴더가 있는 경우, 루트 Vitest 구성에 배열을 정의할 수 있습니다:

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

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Vitest는 packages 내의 모든 폴더를 내부에 구성 파일이 없더라도 별도의 프로젝트로 간주합니다. 이 패턴이 _어떤 파일_이든 일치하면, 파일 이름에 vitest가 없거나 모호한 파일 확장자를 가지고 있더라도 Vitest 구성으로 처리됩니다.

WARNING

Vitest는 루트 vitest.config 파일을 프로젝트 구성에 명시적으로 지정하지 않는 한 프로젝트로 취급하지 않습니다. 결과적으로, 루트 구성은 reporters 및 coverage와 같은 전역 설정에만 영향을 미칩니다. Vitest는 루트 구성 파일에 지정된 apply, config, configResolved 또는 configureServer와 같은 특정 플러그인 훅을 항상 실행한다는 점에 유의하십시오. Vitest는 또한 동일한 플러그인을 사용하여 전역 셋업 및 사용자 정의 커버리지 제공자를 실행합니다.

구성 파일을 통해 프로젝트를 참조할 수도 있습니다:

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

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

이 패턴은 확장자 앞에 e2e 또는 unit이 포함된 vitest.config 파일이 있는 프로젝트만 포함합니다.

인라인 구성을 사용하여 프로젝트를 정의할 수도 있습니다. 구성은 두 구문을 동시에 지원합니다.

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

export default defineConfig({
  test: {
    projects: [
      // `packages` 폴더 내의 모든 폴더와 파일과 일치
      'packages/*',
      {
        // 루트 구성에서 옵션을 상속하려면 "extends: true"를 추가
        extends: true,
        test: {
          include: ['tests/**/*.{browser}.test.{ts,js}'],
          // 인라인 구성을 사용할 때는 이름을 정의하는 것이 권장됩니다
          name: 'happy-dom',
          environment: 'happy-dom',
        },
      },
      {
        test: {
          include: ['tests/**/*.{node}.test.{ts,js}'],
          // 이름 레이블의 색상을 변경할 수 있습니다
          name: { label: 'node', color: 'green' },
          environment: 'node',
        },
      },
    ],
  },
});

WARNING

모든 프로젝트는 고유한 이름을 가져야 하며, 그렇지 않으면 Vitest가 오류를 발생시킵니다. 인라인 구성에 이름이 제공되지 않으면 Vitest는 숫자를 할당합니다. 글로브 구문으로 정의된 프로젝트 구성의 경우, Vitest는 가장 가까운 package.json 파일의 "name" 속성을 사용하거나, 존재하지 않는 경우 폴더 이름을 기본값으로 사용합니다.

프로젝트는 모든 구성 속성을 지원하지 않습니다. 타입 안전성을 높이기 위해 프로젝트 구성 파일 내에서 defineConfig 대신 defineProject 메서드를 사용하세요:

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters"는 프로젝트 구성에서 지원되지 않으므로
    // 오류가 표시됩니다.
    reporters: ['json'],
  },
});

테스트 실행 ​

테스트를 실행하려면 루트 package.json에 다음 스크립트를 정의하세요:

json
{
  "scripts": {
    "test": "vitest"
  }
}

이제 패키지 관리자를 통해 테스트를 실행할 수 있습니다:

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun run test

단일 프로젝트에서만 테스트를 실행해야 하는 경우 --project CLI 옵션을 사용하십시오:

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

CLI 옵션 --project는 여러 프로젝트를 필터링하기 위해 여러 번 사용할 수 있습니다.

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun run test --project e2e --project unit

구성 ​

구성 옵션은 루트 수준 구성 파일에서 자동으로 상속되지 않습니다. 공유 구성 파일을 만들어 프로젝트 구성과 직접 병합할 수 있습니다:

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

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

또한, extends 옵션을 사용하여 루트 수준 구성에서 상속할 수 있습니다. 모든 옵션이 병합됩니다.

ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    pool: 'threads',
    projects: [
      {
        // 플러그인 및 풀과 같은 이 구성의 옵션을 상속합니다
        extends: true,
        test: {
          name: 'unit',
          include: ['**/*.unit.test.ts'],
        },
      },
      {
        // 이 구성에서 어떤 옵션도 상속하지 않습니다
        // 이것이 기본 동작입니다
        extends: false,
        test: {
          name: 'integration',
          include: ['**/*.integration.test.ts'],
        },
      },
    ],
  },
});

지원되지 않는 옵션

일부 구성 옵션은 프로젝트 구성에서 허용되지 않습니다. 가장 주목할 만한 사항은 다음과 같습니다:

  • coverage: 커버리지는 전체 프로세스에 대해 수행됩니다.
  • reporters: 루트 수준 리포터만 지원됩니다.
  • resolveSnapshotPath: 루트 수준 리졸버만 적용됩니다.
  • 테스트 러너에 영향을 미치지 않는 다른 모든 옵션

프로젝트 구성 내에서 지원되지 않는 모든 구성 옵션은 "구성" 가이드에서 * 기호로 표시됩니다. 이러한 옵션은 루트 구성 파일에 한 번 정의되어야 합니다.

Pager
이전테스트 필터링
다음리포터

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

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

Copyright (c) 2021-Present Vitest Team