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

이 기능은 고급이며 매우 낮은 수준의 API입니다. 단순히 테스트를 실행하는 것이 목적이라면 이 기능이 필요하지 않을 수 있습니다. 주로 라이브러리 작성자가 사용합니다.

Vitest는 테스트를 풀(pool)에서 실행합니다. 기본적으로 여러 종류의 풀이 있습니다:

  • threads: node:worker_threads를 사용하여 테스트를 실행합니다 (새로운 워커 컨텍스트를 통해 격리를 제공합니다).
  • forks: node:child_process를 사용하여 테스트를 실행합니다 (새로운 child_process.fork 프로세스를 통해 격리를 제공합니다).
  • vmThreads: node:worker_threads를 사용하여 테스트를 실행합니다 (하지만 새로운 워커 컨텍스트 대신 vm 모듈을 통해 격리를 제공합니다).
  • browser: 브라우저 제공자를 사용하여 테스트를 실행합니다.
  • typescript: 테스트에 대한 타입 검사를 실행합니다.

파일 경로를 지정하여 자신만의 풀을 정의할 수 있습니다:

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

export default defineConfig({
  test: {
    // 기본적으로 모든 파일을 사용자 지정 풀에서 실행합니다.
    pool: './my-custom-pool.ts',
    // `poolOptions` 객체를 사용하여 옵션을 설정할 수 있습니다.
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
  },
});

다른 풀에서 테스트를 실행해야 하는 경우, projects 기능을 사용하세요:

ts
export default defineConfig({
  test: {
    projects: [
      {
        extends: true,
        test: {
          pool: 'threads',
        },
      },
    ],
  },
});

API ​

pool 옵션에 지정된 파일은 첫 번째 옵션으로 Vitest 인터페이스를 받는 함수(비동기일 수 있음)를 내보내야 합니다. 이 함수는 ProcessPool 인터페이스와 일치하는 객체를 반환해야 합니다:

ts
import type { ProcessPool, TestSpecification } from 'vitest/node';

export interface ProcessPool {
  name: string;
  runTests: (
    files: TestSpecification[],
    invalidates?: string[]
  ) => Promise<void>;
  collectTests: (
    files: TestSpecification[],
    invalidates?: string[]
  ) => Promise<void>;
  close?: () => Promise<void>;
}

이 함수는 (서버 구성이 업데이트되지 않는 한) 한 번만 호출됩니다. 일반적으로 이 함수 내에서 테스트에 필요한 모든 것을 초기화한 후 runTests가 호출될 때 재사용하는 것이 좋습니다.

Vitest는 새로운 테스트가 실행되도록 예약될 때 runTests를 호출합니다. files가 비어 있을 경우 호출되지 않습니다. 첫 번째 인수는 TestSpecifications 배열입니다. runTests가 호출되기 전에 파일은 sequencer를 사용하여 정렬됩니다. 동일한 파일이 두 번 나타날 수도 있지만(가능성은 낮음), 항상 다른 프로젝트를 가질 것입니다. 이는 projects 구성을 통해 구현됩니다.

Vitest는 runTests가 실행을 완료할 때까지 기다린 후에야 실행을 완료합니다 (즉, runTests가 해결된 후에만 onFinished를 내보냅니다).

사용자 지정 풀을 사용하는 경우, 테스트 파일과 결과를 직접 제공해야 합니다. 이를 위해 vitest.state를 참조할 수 있으며, 그 중 collectFiles와 updateTasks가 가장 중요합니다. Vitest는 @vitest/runner 패키지의 startTests 함수를 사용하여 이를 수행합니다.

Vitest는 vitest.collect가 호출되거나 CLI 명령을 통해 vitest list가 호출되면 collectTests를 호출합니다. runTests와 동일하게 작동하지만, 테스트 콜백을 실행하지 않고 vitest.state.collectFiles(files)를 호출하여 해당 작업만 보고하면 됩니다.

다른 프로세스 간에 통신하려면 vitest/node의 createMethodsRPC를 사용하여 메서드 객체를 생성하고, 선호하는 모든 형태의 통신 방법을 사용할 수 있습니다. 예를 들어, birpc와 함께 WebSockets를 사용하려면 다음과 같이 작성할 수 있습니다:

ts
import { createBirpc } from 'birpc';
import { parse, stringify } from 'flatted';
import { createMethodsRPC, TestProject } from 'vitest/node';

function createRpc(project: TestProject, wss: WebSocketServer) {
  return createBirpc(createMethodsRPC(project), {
    post: msg => wss.send(msg),
    on: fn => wss.on('message', fn),
    serialize: stringify,
    deserialize: parse,
  });
}

테스트를 실행하지 않고 수집된 것으로 표시하는, 처음부터 직접 만든 간단한 풀의 예는 pool/custom-pool.ts에서 확인할 수 있습니다.

Pager
이전리포터 확장
다음Vitest 구성하기

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/pool

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

Copyright (c) 2021-Present Vitest Team