TestCase
TestCase
클래스는 단일 테스트를 나타냅니다. 이 클래스는 메인 스레드에서만 사용 가능합니다. 런타임 태스크를 다루고 있다면 "러너 API"를 참조하십시오.
TestCase
인스턴스는 항상 test
값을 가진 type
속성을 가지고 있습니다. 이를 통해 다른 태스크 유형을 구별할 수 있습니다:
if (task.type === 'test') {
task; // TestCase
}
project
테스트가 속한 TestProject
를 가리킵니다.
module
테스트가 정의된 TestModule
을 직접 참조합니다.
name
test
함수에 전달된 테스트 이름입니다.
import { test } from 'vitest';
// [!code word:'the validation works correctly']
test('the validation works correctly', () => {
// ...
});
fullName
모든 상위 스위트를 >
기호로 구분한 테스트 이름입니다. 이 테스트의 전체 이름은 "the validation logic > the validation works correctly"입니다:
import { describe, test } from 'vitest';
// [!code word:'the validation works correctly']
// [!code word:'the validation logic']
describe('the validation logic', () => {
test('the validation works correctly', () => {
// ...
});
});
id
이는 테스트의 고유 식별자입니다. 이 ID는 결정적이며 여러 번 실행해도 동일한 테스트에 대해 항상 같습니다. ID는 프로젝트 이름, 모듈 ID 및 테스트 순서에 따라 결정됩니다.
ID는 다음과 같습니다:
1223128da3_0_0
^^^^^^^^^^ 파일 해시
^ 스위트 인덱스
^ 테스트 인덱스
TIP
Vitest 3부터는 vitest/node
의 generateFileHash
함수를 사용하여 파일 해시를 생성할 수 있습니다:
import { generateFileHash } from 'vitest/node';
const hash = generateFileHash(
'/file/path.js', // 상대 경로
undefined // 프로젝트 이름 (설정되지 않았다면 undefined)
);
DANGER
ID를 파싱하려고 시도하지 마세요. 시작 부분에 마이너스 부호가 있을 수 있습니다: -1223128da3_0_0_0
.
location
테스트가 정의된 모듈 내의 위치입니다. 위치는 설정에서 includeTaskLocation
이 활성화된 경우에만 수집됩니다. --reporter=html
, --ui
또는 --browser
플래그가 사용될 경우 이 옵션은 자동으로 활성화됩니다.
이 테스트의 위치는 { line: 3, column: 1 }
입니다:
import { test } from 'vitest'
test('the validation works correctly', () => {
// ...
})
parent
상위 스위트입니다. 테스트가 모듈 내에서 직접 호출된 경우, 부모는 해당 모듈 자체가 됩니다.
options
interface TaskOptions {
readonly each: boolean | undefined;
readonly fails: boolean | undefined;
readonly concurrent: boolean | undefined;
readonly shuffle: boolean | undefined;
readonly retry: number | undefined;
readonly repeats: number | undefined;
readonly mode: 'run' | 'only' | 'skip' | 'todo';
}
테스트가 수집될 때 사용된 옵션입니다.
ok
function ok(): boolean;
테스트가 스위트에서 실패하지 않았는지 확인합니다. 테스트가 아직 완료되지 않았거나 건너뛰어진 경우 true
를 반환합니다.
meta
function meta(): TaskMeta;
테스트 실행 중 테스트에 첨부된 사용자 정의 메타데이터입니다. 메타는 테스트 실행 중에 ctx.task.meta
객체에 속성을 할당하여 첨부할 수 있습니다:
import { test } from 'vitest';
test('the validation works correctly', ({ task }) => {
// ...
task.meta.decorated = false;
});
테스트가 아직 실행을 마치지 않은 경우, 메타는 빈 객체가 됩니다.
result
function result(): TestResult;
테스트 결과입니다. 테스트가 아직 완료되지 않았거나 방금 수집된 경우 TestResultPending
과 같습니다:
export interface TestResultPending {
/**
* 테스트가 수집되었지만 아직 실행이 완료되지 않았습니다.
*/
readonly state: 'pending';
/**
* 대기 중인 테스트에는 오류가 없습니다.
*/
readonly errors: undefined;
}
테스트가 건너뛰어진 경우, 반환 값은 TestResultSkipped
가 됩니다:
interface TestResultSkipped {
/**
* 테스트는 'skip' 또는 'todo' 플래그로 인해 건너뛰어졌습니다.
* 어떤 플래그가 사용되었는지는 'options.mode' 옵션에서 확인할 수 있습니다.
*/
readonly state: 'skipped';
/**
* 건너뛴 테스트에는 오류가 없습니다.
*/
readonly errors: undefined;
/**
* `ctx.skip(note)`로 전달된 사용자 지정 노트입니다.
*/
readonly note: string | undefined;
}
TIP
다른 테스트에 only
플래그가 있어서 테스트가 건너뛰어진 경우, options.mode
는 skip
과 같습니다.
테스트가 실패한 경우, 반환 값은 TestResultFailed
가 됩니다:
interface TestResultFailed {
/**
* 테스트 실행에 실패했습니다.
*/
readonly state: 'failed';
/**
* 테스트 실행 중에 발생한 오류입니다.
*/
readonly errors: ReadonlyArray<TestError>;
}
테스트가 통과한 경우, 반환 값은 TestResultPassed
가 됩니다:
interface TestResultPassed {
/**
* 테스트가 성공적으로 통과했습니다.
*/
readonly state: 'passed';
/**
* 테스트 실행 중에 발생한 오류입니다.
*/
readonly errors: ReadonlyArray<TestError> | undefined;
}
WARNING
passed
상태의 테스트에도 오류가 첨부될 수 있습니다. 이는 retry
가 한 번 이상 트리거된 경우 발생할 수 있습니다.
diagnostic
function diagnostic(): TestDiagnostic | undefined;
테스트 기간, 메모리 사용량 등 테스트 관련 유용한 정보:
interface TestDiagnostic {
/**
* 테스트 실행 시간이 `slowTestThreshold`를 초과하는 경우.
*/
readonly slow: boolean;
/**
* 테스트가 사용한 메모리 양 (바이트 단위).
* 이 값은 테스트가 `logHeapUsage` 플래그와 함께 실행된 경우에만 사용할 수 있습니다.
*/
readonly heap: number | undefined;
/**
* 테스트를 실행하는 데 걸린 시간 (밀리초 단위).
*/
readonly duration: number;
/**
* 테스트가 시작된 시간 (밀리초 단위).
*/
readonly startTime: number;
/**
* 테스트가 재시도된 횟수.
*/
readonly retryCount: number;
/**
* `repeats` 옵션에 따라 테스트가 반복된 횟수.
* 테스트가 반복 중에 실패했고 `retry`가 구성되지 않은 경우 이 값은 더 낮을 수 있습니다.
*/
readonly repeatCount: number;
/**
* 테스트가 두 번째 재시도에서 통과했는지 여부.
*/
readonly flaky: boolean;
}
INFO
테스트가 아직 실행되도록 예약되지 않은 경우 diagnostic()
은 undefined
를 반환합니다.