TestCase
Класс TestCase
представляет собой отдельный тест. Этот класс доступен только в основном потоке выполнения. Если вы работаете с задачами времени выполнения, обратитесь к разделу "Runner API".
Экземпляр TestCase
всегда имеет свойство type
со значением test
. Вы можете использовать его для различения типов задач:
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
Вы можете сгенерировать хеш-код файла с помощью функции generateFileHash
из vitest/node
, которая доступна с Vitest 3:
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
, если тест еще не был запланирован к выполнению.