리포터 확장
WARNING
이것은 고급 API입니다. 내장 리포터를 구성하려면 "리포터" 가이드를 참조하십시오.
vitest/reporters
에서 리포터를 가져와 확장하여 사용자 정의 리포터를 만들 수 있습니다.
내장 리포터 확장
일반적으로 리포터를 처음부터 새로 만들 필요는 없습니다. vitest
는 확장할 수 있는 몇 가지 기본 리포터를 제공합니다.
ts
import { DefaultReporter } from 'vitest/reporters';
export default class MyDefaultReporter extends DefaultReporter {
// 필요한 로직 추가
}
물론 리포터를 완전히 새로 만들 수도 있습니다. BaseReporter
클래스를 확장하고 필요한 메서드를 구현하기만 하면 됩니다.
다음은 사용자 정의 리포터의 예시입니다.
ts
import { BaseReporter } from 'vitest/reporters';
export default class CustomReporter extends BaseReporter {
onCollected() {
const files = this.ctx.state.getFiles(this.watchFilters);
this.reportTestSummary(files);
}
}
또는 Reporter
인터페이스를 구현합니다.
ts
import type { Reporter } from 'vitest/node';
export default class CustomReporter implements Reporter {
onCollected() {
// 필요한 로직 추가
}
}
그런 다음 vitest.config.ts
파일에서 사용자 정의 리포터를 사용할 수 있습니다.
ts
import { defineConfig } from 'vitest/config';
import CustomReporter from './custom-reporter.js';
export default defineConfig({
test: {
reporters: [new CustomReporter()],
},
});
보고된 작업
리포터가 직접 작업을 처리하는 대신, 보고된 작업 API를 사용하는 것이 좋습니다.
vitest.state.getReportedEntity(runnerTask)
를 호출하여 이 API에 접근할 수 있습니다.
ts
import type { Reporter, RunnerTestFile, TestModule, Vitest } from 'vitest/node';
class MyReporter implements Reporter {
private vitest!: Vitest;
onInit(vitest: Vitest) {
this.vitest = vitest;
}
onFinished(files: RunnerTestFile[]) {
for (const file of files) {
// 참고: 이전 작업 구현에서는 "module" 대신 "file"을 사용했습니다.
const testModule = this.vitest.state.getReportedEntity(
file
) as TestModule;
for (const task of testModule.children) {
// ^?
console.log('finished', task.type, task.fullName);
}
}
}
}
내보낸 리포터
vitest
는 별도의 설정 없이 바로 사용할 수 있는 몇 가지 내장 리포터를 제공합니다.
내장 리포터:
BasicReporter
DefaultReporter
DotReporter
JsonReporter
VerboseReporter
TapReporter
JUnitReporter
TapFlatReporter
HangingProcessReporter
기본 추상 리포터:
BaseReporter
인터페이스 리포터:
Reporter