Skip to content
Vitest 1
Main Navigation 가이드API구성고급
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

고급

Node API

테스트 러너

작업 메타데이터

리포터 확장하기

커스텀 풀

이 페이지에서

커스텀 풀 ​

WARNING

이것은 고급 API입니다. 단순히 테스트를 실행하는 경우에는 필요하지 않을 가능성이 높습니다. 주로 라이브러리 개발자를 위한 기능입니다.

Vitest는 풀을 사용하여 테스트를 실행합니다. 기본적으로 다음과 같은 여러 풀이 제공됩니다.

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

파일 경로를 지정하여 사용자 정의 풀을 정의할 수 있습니다.

ts
import { defineConfig } from 'vitest/config';
// ---cut---
export default defineConfig({
  test: {
    // 기본적으로 모든 파일은 커스텀 풀을 사용하여 실행됩니다.
    pool: './my-custom-pool.ts',
    // `poolOptions` 객체를 사용하여 옵션을 설정할 수 있습니다.
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
    // 특정 파일 집합에만 풀을 지정할 수도 있습니다.
    poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
  },
});

API ​

pool 옵션에 지정된 파일은 첫 번째 인수로 Vitest 인터페이스를 받는 함수(비동기 함수 가능)를 export해야 합니다. 이 함수는 ProcessPool 인터페이스를 준수하는 객체를 반환해야 합니다.

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

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

이 함수는 서버 구성이 변경되지 않는 한 한 번만 호출됩니다. 일반적으로 이 함수 내에서 테스트에 필요한 모든 것을 초기화하고 runTests 호출 시 재사용하는 것이 효율적입니다.

Vitest는 새 테스트 실행이 예약될 때마다 runTests를 호출합니다. files 배열이 비어 있으면 호출하지 않습니다. 첫 번째 인수는 튜플의 배열입니다. 각 튜플의 첫 번째 요소는 작업 공간 프로젝트에 대한 참조이고, 두 번째 요소는 테스트 파일의 절대 경로입니다. 파일은 runTests가 호출되기 전에 sequencer를 사용하여 정렬됩니다. 동일한 파일이 두 번 이상 나타날 수 있지만 (드물게), 항상 다른 프로젝트를 가리킵니다. 이는 vitest.workspace.ts 구성을 통해 가능합니다.

Vitest는 runTests의 실행이 완료될 때까지 기다린 후 테스트 실행을 완료합니다 (즉, runTests가 완료된 후에만 onFinished 이벤트를 발생시킵니다).

커스텀 풀을 사용하는 경우, 테스트 파일과 결과를 직접 제공해야 합니다. 이를 위해 vitest.state를 참조하여 collectFiles와 updateTasks를 활용할 수 있습니다. Vitest는 @vitest/runner 패키지의 startTests 함수를 사용하여 이 작업을 수행합니다.

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

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

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

모든 테스트가 수집되었는지 확인하려면 ctx.state.collectFiles를 호출하고, Vitest 보고자에게 결과를 보고해야 합니다.

ts
async function runTests(project: WorkspaceProject, tests: string[]) {
  // ... 테스트를 실행하고 결과를 "files" 및 "tasks"에 저장
  const methods = createMethodsRPC(project);
  await methods.onCollected(files);
  // 대부분의 보고자는 "onTaskUpdate"를 통해 업데이트되는 결과에 의존합니다.
  await methods.onTaskUpdate(tasks);
}

pool/custom-pool.ts에서 간단한 예제를 확인할 수 있습니다.

Pager
이전리포터 확장하기

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

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/pool

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

Copyright (c) 2024 Mithril Contributors