Группировка и вложенные describe
Урок учит структурировать большой набор тестов вложенными блоками describe.
describe можно вкладывать друг в друга, выстраивая дерево «модуль → сценарий → конкретный случай».
Зачем структура
Когда у функции десятки тестов, плоский список превращается в кашу. Вложенные describe группируют случаи по смыслу: например, отдельно «валидный ввод» и «ошибки».
describe('parsePrice()', () => {
describe('корректный ввод', () => {
it('парсит целое число', () => {
expect(parsePrice('100')).toBe(100);
});
it('парсит дробное', () => {
expect(parsePrice('99.90')).toBe(99.9);
});
});
describe('некорректный ввод', () => {
it('бросает на пустой строке', () => {
expect(() => parsePrice('')).toThrow();
});
it('бросает на буквах', () => {
expect(() => parsePrice('abc')).toThrow();
});
});
});Как это выглядит в отчёте
Jest показывает вложенность отступами:
parsePrice()
корректный ввод
✓ парсит целое число
✓ парсит дробное
некорректный ввод
✓ бросает на пустой строке
✓ бросает на буквахТакое дерево читается как спецификация поведения — сразу понятно, какие сценарии покрыты.
Не переусердствуйте
Глубокая вложенность (4-5 уровней) усложняет чтение. Обычно хватает двух уровней: внешний describe на функцию/модуль и внутренние — на группы сценариев. Если тестов мало, плоская структура нормальна.
describe — это просто организация
Сам по себе describe ничего не проверяет: он только группирует и задаёт контекст для хуков (о них — в следующем уроке). Код внутри describe, но вне it, выполняется один раз при сборе тестов — туда не стоит класть проверки.
Итог
- Вложенные
describeстроят дерево «модуль → сценарий → случай». - Отчёт читается как спецификация поведения.
- Двух уровней вложенности обычно достаточно.
describeгруппирует, но сам ничего не проверяет.