Первый тест: test и expect
Урок показывает анатомию первого теста на Jest: функции test и expect и как они связаны.
expect(value) создаёт «ожидание», а матчер вроде toBe описывает, каким это значение должно быть.
Код, который будем тестировать
Пусть есть модуль math.js с простой функцией:
// math.js
function sum(a, b) {
return a + b;
}
module.exports = { sum };Первый тест
Рядом создаём math.test.js. Этот код использует Jest и запускается в Node, поэтому здесь он показан как иллюстрация (без кнопки «Запустить»):
const { sum } = require('./math');
test('складывает два числа', () => {
expect(sum(2, 3)).toBe(5);
});Разберём по частям:
test('описание', функция)— объявляет один тест. Первый аргумент — человекочитаемое описание, второй — функция с проверками.expect(sum(2, 3))— берём фактический результат..toBe(5)— матчер: говорим, что результат должен быть строго равен5.
Читается почти как английская фраза: «expect sum of 2 and 3 to be 5».
Псевдонимы test и it
Функцию test можно писать как it — это полные синонимы. it читается естественнее в связке с описанием поведения:
it('возвращает 0 при сложении 0 и 0', () => {
expect(sum(0, 0)).toBe(0);
});Что происходит при провале
Если функция вернёт не то, что ожидается, Jest покажет понятную разницу:
expect(sum(2, 3)).toBe(6); // ожидание не сбудетсяВывод:
● складывает два числа expect(received).toBe(expected) Expected: 6 Received: 5
Видно и что ожидали, и что получили — это сильно ускоряет отладку по сравнению с самописным assert.
Та же идея на чистом JavaScript
Чтобы прочувствовать связку «expect → матчер», воспроизведём её мини-версией прямо в браузере:
function expect(received) {
return {
toBe(expected) {
if (received === expected) {
console.log("\u2713 passed: " + received + " === " + expected);
} else {
console.log("\u2717 FAILED: ожидали " + expected + ", получили " + received);
}
}
};
}
function sum(a, b) {
return a + b;
}
expect(sum(2, 3)).toBe(5);
expect(sum(10, 5)).toBe(15);
expect(sum(2, 2)).toBe(5);Вывод:
✓ passed: 5 === 5 ✓ passed: 15 === 15 ✗ FAILED: ожидали 5, получили 4
Это упрощённая копия настоящего expect().toBe() из Jest. Настоящий Jest добавляет десятки матчеров, изоляцию и отчёты, но принцип ровно тот же.
Итог
test(name, fn)(илиit) объявляет один тест.expect(actual).matcher(expected)— основа любой проверки.toBeпроверяет строгое равенство.- При провале Jest показывает Expected и Received — это ускоряет отладку.