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

API

Node API

고급 API

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

플러그인 API

러너 API

리포터

작업 메타데이터

가이드

테스트 실행

리포터 확장

사용자 지정 풀

Vitest 구성하기

테스트 API 참조

이 페이지에서

테스트 실행 ​

WARNING

이 가이드는 Node.js 스크립트를 통해 테스트를 실행하기 위한 고급 API 사용법을 설명합니다. 단순히 테스트를 실행하려는 경우, 이 가이드는 필요하지 않을 수 있습니다. 주로 라이브러리 개발자가 사용합니다.

실험적인 API는 SemVer를 따르지 않을 수 있으므로, 해당 API를 사용할 때는 Vitest 버전을 명시적으로 지정(pin)해야 합니다.

Vitest는 두 가지 메서드를 통해 Vitest를 시작할 수 있습니다:

  • startVitest: Vitest를 시작하고, 필수 패키지 설치 여부를 확인하며, 즉시 테스트를 실행합니다.
  • createVitest: Vitest 인스턴스를 생성하기만 할 뿐, 어떤 테스트도 실행하지 않습니다.

startVitest ​

ts
import { startVitest } from 'vitest/node';

const vitest = await startVitest(
  'test',
  [], // CLI 필터
  {}, // 테스트 설정 재정의
  {}, // Vite 설정 재정의
  {} // 사용자 정의 Vitest 옵션
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
  console.log(testModule.moduleId, testModule.ok() ? 'passed' : 'failed');
}

TIP

TestModule, TestSuite 및 TestCase API는 실험적이지 않으며 Vitest 2.1부터 SemVer를 따릅니다.

createVitest ​

테스트를 실행하지 않고 Vitest 인스턴스를 생성합니다.

createVitest 메서드는 필수 패키지 설치 여부를 확인하지 않습니다. 또한 config.standalone 또는 config.mergeReports 설정을 따르지 않습니다. watch 모드가 비활성화되어 있어도 Vitest는 자동으로 종료되지 않습니다.

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest(
  'test',
  {}, // 테스트 설정 재정의
  {}, // Vite 설정 재정의
  {} // 사용자 정의 Vitest 옵션
);

// `vitest.cancelCurrentRun()`이 호출될 때 호출됨
vitest.onCancel(() => {});
// `vitest.close()` 호출 중에 호출됨
vitest.onClose(() => {});
// Vitest가 테스트 파일을 다시 실행할 때 호출됨
vitest.onTestsRerun(files => {});

try {
  // 테스트가 실패하면 process.exitCode를 1로 설정하지만,
  // 프로세스를 자동으로 종료하지는 않습니다.
  await vitest.start(['my-filter']);
} catch (err) {
  // 다음 경우에 예외가 발생할 수 있습니다:
  // 파일을 찾을 수 없는 경우 "FilesNotFoundError"
  // `--changed` 옵션 사용 시 저장소가 초기화되지 않은 경우 "GitNotFoundError"
} finally {
  await vitest.close();
}

Vitest 인스턴스를 유지하려면 최소한 init을 호출해야 합니다. 이 메서드는 리포터와 커버리지 프로바이더를 초기화하지만, 어떤 테스트도 실행하지는 않습니다. Vitest 워처를 사용할 의도가 없더라도 인스턴스를 계속 실행하려면 watch 모드를 활성화하는 것이 좋습니다. Vitest는 일부 기능이 연속적인 프로세스에서 올바르게 작동하도록 이 플래그에 의존합니다.

리포터가 초기화된 후, 수동 실행이 필요한 경우 runTestSpecifications 또는 rerunTestSpecifications를 사용하여 테스트를 실행할 수 있습니다:

ts
watcher.on('change', async file => {
  const specifications = vitest.getModuleSpecifications(file);
  if (specifications.length) {
    vitest.invalidateFile(file);
    // "reporter.onWatcher*" 훅이 호출되지 않아야 하는 경우
    // runTestSpecifications를 사용할 수 있습니다.
    await vitest.rerunTestSpecifications(specifications);
  }
});

WARNING

위 예시는 기본 워처 동작을 비활성화할 경우의 잠재적인 사용 사례를 보여줍니다. 기본적으로 Vitest는 파일이 변경되면 테스트를 자동으로 다시 실행합니다.

또한 getModuleSpecifications는 globTestSpecifications에 의해 이미 처리되지 않은 테스트 파일을 해결하지 않습니다. 파일이 새로 생성된 경우에는 project.matchesGlobPattern을 대신 사용합니다:

ts
watcher.on('add', async file => {
  const specifications = [];
  for (const project of vitest.projects) {
    if (project.matchesGlobPattern(file)) {
      specifications.push(project.createSpecification(file));
    }
  }

  if (specifications.length) {
    await vitest.rerunTestSpecifications(specifications);
  }
});

워처를 비활성화해야 하는 경우, Vite 5.3부터 server.watch: null 또는 server.watch: { ignored: ['*/*'] }를 Vite 설정에 전달할 수 있습니다:

ts
await createVitest(
  'test',
  {},
  {
    plugins: [
      {
        name: 'stop-watcher',
        async configureServer(server) {
          await server.watcher.close();
        },
      },
    ],
    server: {
      watch: null,
    },
  }
);
Pager
이전작업 메타데이터
다음리포터 확장

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/guide/tests

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

Copyright (c) 2021-Present Vitest Team