Node API
WARNING
Vitest는 실험적인 내부 API를 노출합니다. 주요 변경 사항이 SemVer를 따르지 않을 수 있으므로, 사용할 때 Vitest 버전을 고정하십시오.
startVitest
Node API를 사용하여 Vitest 테스트를 시작할 수 있습니다.
import { startVitest } from 'vitest/node';
const vitest = await startVitest('test');
await vitest?.close();
startVitest
함수는 테스트를 시작할 수 있는 경우 Vitest
인스턴스를 반환합니다. 다음 경우에는 undefined
가 반환됩니다.
- Vitest가
vite
패키지를 찾지 못한 경우 (일반적으로 Vitest와 함께 설치됩니다) - 커버리지가 활성화되어 있고 실행 모드가 "test"인 경우, 그러나 커버리지 패키지가 설치되지 않은 경우 (
@vitest/coverage-v8
또는@vitest/coverage-istanbul
) - 필요한 환경 패키지가 설치되지 않은 경우 (
jsdom
/happy-dom
/@edge-runtime/vm
)
undefined
가 반환되거나 테스트 실행 중 오류가 발생하면 Vitest는 process.exitCode
를 1
로 설정합니다.
watch 모드가 활성화되지 않은 경우, Vitest는 close
메서드를 호출합니다.
watch 모드가 활성화되어 있고 터미널이 TTY를 지원하는 경우, Vitest는 콘솔 단축키를 등록합니다.
두 번째 인수로 필터 목록을 전달할 수 있습니다. Vitest는 전달된 문자열 중 하나라도 파일 경로에 포함된 테스트만 실행합니다.
세 번째 인수를 사용하여 CLI 인수를 전달할 수도 있으며, 이는 모든 테스트 구성 옵션보다 우선 적용됩니다.
또는 네 번째 인수로 전체 Vite 설정을 전달할 수도 있으며, 이는 다른 모든 사용자 정의 옵션보다 우선 적용됩니다.
테스트를 실행한 후 state.getFiles
API에서 결과를 얻을 수 있습니다.
const vitest = await startVitest('test');
console.log(vitest.state.getFiles()); // [{ type: 'file', ... }]
Vitest 2.1부터는 state.getFiles
와 함께 "Reported Tasks" API를 사용하는 것이 좋습니다. 향후 Vitest는 해당 객체를 직접 반환할 예정입니다.
const vitest = await startVitest('test');
const [fileTask] = vitest.state.getFiles();
const testFile = vitest.state.getReportedEntity(fileTask);
createVitest
createVitest
함수를 사용하여 Vitest 인스턴스를 직접 생성할 수 있습니다. 이 함수는 startVitest
와 동일한 Vitest
인스턴스를 반환하지만, 테스트를 시작하거나 필요한 패키지가 설치되었는지 확인하지 않습니다.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});
parseCLI
이 메서드를 사용하여 CLI 인수를 파싱할 수 있습니다. Vitest CLI에서 사용하는 것과 동일한 형식으로 CLI 인수의 문자열 (인수는 공백으로 구분됨) 또는 문자열 배열을 허용합니다. 필터와 options
를 반환하며, 이는 나중에 createVitest
또는 startVitest
메서드에 전달할 수 있습니다.
import { parseCLI } from 'vitest/node';
parseCLI('vitest ./files.ts --coverage --browser=chrome');
Vitest
Vitest 인스턴스는 현재 테스트 모드를 필요로 합니다. 다음 중 하나일 수 있습니다.
- 런타임 테스트를 실행할 때
test
- 벤치마크를 실행할 때
benchmark
mode
test
Test 모드는 test
또는 it
내부의 함수만 호출하며, bench
가 발견되면 오류를 발생시킵니다. 이 모드는 테스트 파일을 찾기 위해 구성에서 include
및 exclude
옵션을 사용합니다.
benchmark
Benchmark 모드는 bench
함수를 호출하며, test
또는 it
가 발견되면 오류를 발생시킵니다. 이 모드는 벤치마크 파일을 찾기 위해 구성에서 benchmark.include
및 benchmark.exclude
옵션을 사용합니다.
start
start
메서드를 사용하여 테스트 또는 벤치마크 실행을 시작할 수 있습니다. 문자열 배열을 전달하여 테스트 파일을 필터링할 수 있습니다.
provide
Vitest는 vitest.getCoreWorkspaceProject().provide
의 약칭인 provide
메서드를 제공합니다. 이 메서드를 사용하면 메인 스레드에서 테스트로 값을 전달할 수 있습니다. 모든 값은 저장되기 전에 structuredClone
을 통해 확인되지만, 값 자체는 복제되지 않습니다.
테스트에서 값을 받으려면 vitest
엔트리포인트에서 inject
메서드를 가져와야 합니다.
import { inject } from 'vitest';
const port = inject('wsPort'); // 3000
더 나은 타입 안전성을 위해 ProvidedContext
의 타입을 확장하는 것이 좋습니다.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});
vitest.provide('wsPort', 3000);
declare module 'vitest' {
export interface ProvidedContext {
wsPort: number;
}
}
WARNING
엄밀히 말하면 provide
는 WorkspaceProject
의 메서드이므로 특정 프로젝트에 제한됩니다. 하지만 모든 프로젝트는 코어 프로젝트에서 값을 상속받기 때문에 vitest.provide
는 테스트에 값을 전달하는 일반적인 방법이 됩니다.
TIP
이 메서드는 공개 API를 사용하지 않으려는 경우 전역 설정 파일에서도 사용할 수 있습니다.
export default function setup({ provide }) {
provide('wsPort', 3000);
}