TestSuite
Класс TestSuite
представляет собой отдельный набор тестов. Этот класс доступен только в основном потоке выполнения. При работе с задачами времени выполнения обратитесь к разделу "Runner API".
Экземпляр TestSuite
всегда имеет свойство type
со значением suite
. Вы можете использовать его для различения различных типов задач:
if (task.type === 'suite') {
task; // TestSuite
}
project
Это ссылка на TestProject
, к которому принадлежит данный сьют.
module
Это прямая ссылка на TestModule
, где определен данный сьют.
name
Это имя сьюта, переданное функции describe
.
import { describe } from 'vitest';
// [!code word:'the validation logic']
describe('the validation logic', () => {
// ...
});
fullName
Полное имя сьюта, включающее все родительские сьюты, разделенные символом >
. Например, для данного сьюта полное имя будет "the validation logic > validating cities":
import { describe, test } from 'vitest';
// [!code word:'the validation logic']
// [!code word:'validating cities']
describe('the validation logic', () => {
describe('validating cities', () => {
// ...
});
});
id
Это уникальный идентификатор сьюта. Этот ID является детерминированным и будет одинаковым для одного и того же сьюта при многократных запусках. ID формируется на основе имени проекта, ID модуля и порядка сьюта.
Формат ID выглядит следующим образом:
1223128da3_0_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 { describe } from 'vitest'
describe('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';
}
Опции, с которыми был собран сьют.
children
Это коллекция всех сьютов и тестов, содержащихся в текущем сьюте.
for (const task of suite.children) {
if (task.type === 'test') {
console.log('test', task.fullName);
} else {
// task is TaskSuite
console.log('suite', task.name);
}
}
WARNING
Обратите внимание, что suite.children
перебирает только первый уровень вложенности и не углубляется. Если вам нужно перебрать все тесты или сьюты, используйте children.allTests()
или children.allSuites()
. Если вам нужно перебрать все элементы, используйте рекурсивную функцию:
function visit(collection: TestCollection) {
for (const task of collection) {
if (task.type === 'suite') {
// report a suite
visit(task.children);
} else {
// report a test
}
}
}
ok
function ok(): boolean;
Проверяет, есть ли в сьюте проваленные тесты. Это также вернет false
, если сбор сьюта завершился неудачей. В этом случае проверьте errors()
на наличие выброшенных ошибок.
state
function state(): TestSuiteState;
Проверяет состояние выполнения сьюта. Возможные возвращаемые значения:
- pending: тесты в этом сьюте еще не завершили выполнение.
- failed: этот сьют содержит проваленные тесты или их не удалось собрать. Если
errors()
не пуст, это означает, что сьют не смог собрать тесты. - passed: каждый тест внутри этого сьюта успешно пройден.
- skipped: этот сьют был пропущен во время сбора.
WARNING
Обратите внимание, что модуль теста также имеет метод state
, который возвращает те же значения, но может также возвращать дополнительное состояние queued
, если модуль еще не был выполнен.
errors
function errors(): TestError[];
Ошибки, произошедшие вне процесса выполнения теста во время сбора, например, синтаксические ошибки.
import { describe } from 'vitest';
describe('collection failed', () => {
throw new Error('a custom error');
});
WARNING
Обратите внимание, что ошибки сериализуются в простые объекты: проверка instanceof Error
всегда будет возвращать false
.
meta 3.1.0+
function meta(): TaskMeta;
Пользовательские метаданные, которые были прикреплены к сьюту во время его выполнения или сбора. Метаданные могут быть прикреплены путем присвоения свойства объекту task.meta
во время выполнения теста:
import { test } from 'vitest';
describe('the validation works correctly', task => {
// установить свойство "decorated" во время сбора
task.meta.decorated = false;
test('some test', ({ task }) => {
// установить свойство "decorated" во время выполнения теста, которое будет доступно
// только в хуке onTestCaseReady
task.suite.meta.decorated = false;
});
});
TIP
Если метаданные были прикреплены во время сбора (вне функции test
), они будут доступны в хуке onTestModuleCollected
в пользовательском репортере.