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, если тест еще не был запланирован к выполнению.