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 в пользовательском репортере.