Структура теста: describe, it и шаблон AAA
Урок учит структурировать тесты: группировать их describe и писать тело по шаблону AAA.
AAA (Arrange-Act-Assert) — шаблон тела теста: сначала подготовь данные, затем выполни действие, затем проверь результат.
Группировка: describe
Когда тестов много, их объединяют в блоки describe — обычно по тестируемой функции или фиче. Это даёт структуру в отчёте и читаемые заголовки.
const { sum } = require('./math');
describe('sum()', () => {
it('складывает положительные числа', () => {
expect(sum(2, 3)).toBe(5);
});
it('работает с отрицательными', () => {
expect(sum(-2, -3)).toBe(-5);
});
});В отчёте это выглядит как дерево: sum() > складывает положительные числа.
Шаблон AAA
Хорошо читаемый тест разбивается на три фазы:
- Arrange — подготовка: создаём входные данные, объекты, состояние.
- Act — действие: вызываем то, что тестируем.
- Assert — проверка: сравниваем результат с ожиданием.
it('применяет скидку 10%', () => {
// Arrange
const price = 200;
const discount = 0.1;
// Act
const result = applyDiscount(price, discount);
// Assert
expect(result).toBe(180);
});Разделение фаз делает тест понятным с первого взгляда: видно, что подаём на вход и что ожидаем на выходе.
Один тест — одна мысль
Старайтесь проверять в одном it одно поведение. Если тест называется «складывает и вычитает», его стоит разбить: тогда при провале сразу понятно, что именно сломалось.
AAA на чистом JavaScript
Покажем структуру AAA живым примером — с крошечным assert и чистой функцией:
function applyDiscount(price, rate) {
return price - price * rate;
}
function assert(actual, expected, name) {
const ok = actual === expected;
console.log((ok ? "\u2713 passed: " : "\u2717 FAILED: ") + name +
" (получили " + actual + ")");
}
// Arrange
const price = 200;
const rate = 0.1;
// Act
const result = applyDiscount(price, rate);
// Assert
assert(result, 180, "скидка 10% от 200");
assert(applyDiscount(100, 0.25), 75, "скидка 25% от 100");Вывод:
✓ passed: скидка 10% от 200 (получили 180) ✓ passed: скидка 25% от 100 (получили 75)
Именование
Описание теста должно читаться как утверждение о поведении: «возвращает 0 для пустого массива», «бросает ошибку при отрицательной цене». Плохие имена — «тест 1», «работает».
Итог
describeгруппирует связанные тесты и даёт структуру отчёту.- AAA = Arrange (подготовка) → Act (действие) → Assert (проверка).
- Один тест — одно проверяемое поведение.
- Имя теста описывает ожидаемое поведение, а не «тест №1».