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

Vitest는 실험적인 비공개 API를 노출합니다. 주요 변경 사항이 SemVer를 따르지 않을 수 있으므로 사용할 때 Vitest 버전을 고정하십시오.

커스텀 리포터를 개발하거나 Vitest Node.js API를 사용하는 경우, 다양한 컨텍스트에서 실행되는 테스트의 데이터를 커스텀 Vitest 핸들러 또는 리포터로 전달해야 할 때가 있습니다.

이때 직렬화할 수 없는 테스트 컨텍스트에 의존하는 것은 적절하지 않습니다. Vitest는 모든 작업(테스트 스위트 또는 테스트)에서 사용할 수 있는 meta 속성을 제공하여 테스트와 Node.js 프로세스 간에 데이터를 공유할 수 있도록 합니다. 이 통신은 단방향으로만 가능하며, meta 속성은 테스트 컨텍스트 내에서만 수정할 수 있습니다. Node.js 컨텍스트에서 변경해도 테스트에는 반영되지 않습니다.

테스트 컨텍스트 또는 테스트 스위트의 beforeAll/afterAll 훅 내에서 meta 속성을 설정할 수 있습니다.

ts
afterAll((suite) => {
  suite.meta.done = true
})

test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler'
})

테스트가 완료되면 Vitest는 결과와 meta를 포함한 작업을 RPC를 통해 Node.js 프로세스로 보냅니다. 이 작업을 가로채서 처리하려면 리포터 구현에서 onTaskUpdate 메서드를 활용할 수 있습니다.

ts
// custom-reporter.js
export default {
  // 필요에 따라 패킷을 가로챌 수 있습니다.
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta는 "onFinished" 내 모든 작업에 포함되어 있습니다.
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

Vitest는 짧은 시간 내에 여러 테스트가 완료되면 동시에 여러 작업을 보낼 수 있습니다.

BEWARE

Vitest는 Node.js 프로세스와 통신하기 위해 다음과 같은 다양한 방법을 사용합니다.

  • Vitest가 워커 스레드 내에서 테스트를 실행하는 경우, 메시지 포트를 통해 데이터를 전송합니다.
  • Vitest가 자식 프로세스를 사용하는 경우, 데이터는 process.send API를 통해 직렬화된 버퍼 형태로 전송됩니다.
  • Vitest가 브라우저에서 테스트를 실행하는 경우, 데이터는 flatted 패키지를 사용하여 문자열로 변환됩니다.

일반적으로 함수, Promise, regexp (v8.stringify로는 직렬화할 수 없지만, 문자열 형태로 보내 Node.js 프로세스에서 직접 파싱할 수 있습니다.) 등 직렬화할 수 없는 데이터를 제외하고는 대부분의 데이터를 전송할 수 있습니다. 순환 참조가 있는 데이터도 가능합니다.

또한, 오류 속성을 설정하기 전에 반드시 직렬화를 수행해야 합니다.

테스트 완료 후 Vitest 상태를 통해 이 정보를 얻을 수도 있습니다.

ts
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'

TypeScript를 사용하는 경우 타입 정의를 확장할 수도 있습니다.

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}
Pager
이전테스트 러너
다음리포터 확장하기

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

Copyright (c) 2024 Mithril Contributors

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

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

Copyright (c) 2024 Mithril Contributors