Кратко
Тестирование — проверка, что код работает правильно. describe — группа тестов. it — один тест. expect — проверка результата (assertion). Test runner запускает тесты и показывает результат. Здесь показан Mocha — это один из инструментов тестирования, но не единственный современный вариант: популярны также Jest и Vitest. Тестирование — отдельная инженерная дисциплина (engineering skill).
Подробно
Структура теста: describe('Math operations', () => { it('should add two numbers', () => { const result = 1 + 2; expect(result).to.equal(3); });
it('should handle negative numbers', () => { const result = -1 + -2; expect(result).to.equal(-3); }); });
Assertions (expect): expect(value).to.equal(expected); // strict equal expect(value).to.be.true; // boolean check expect(value).to.be.null; // null check expect(array).to.have.length(3); // length check expect(fn).to.throw(Error); // error check
Mocha + Chai (пример одного из инструментов; Jest и Vitest устроены похоже): // npm install mocha chai // package.json: "test": "mocha"
const { expect } = require('chai');
describe('User', () => { it('should create user with name', () => { const user = { name: 'Анна' }; expect(user.name).to.equal('Анна'); });
it('should have default role', () => { const user = { name: 'Анна', role: 'user' }; expect(user.role).to.equal('user'); }); });
Виды тестов:
- Unit tests — проверка отдельных функций
- Integration tests — проверка взаимодействия модулей
- E2E tests — проверка пользовательского сценария
Тестирование — отдельная инженерная дисциплина. Этот урок даёт обзор, не глубину.
Ментальная модель
Тест — как контрольный чек-лист. Вы проверяете: «Работает ли функция правильно?» describe — категория чек-листа. it — один пункт. expect — проверка. Если все пункты пройдены — тест зелёный (pass). Если нет — красный (fail).
Примеры
**Самый простой:**
// Простейший тест
function add(a, b) {
return a + b;
}
// Вместо console.log проверяем вручную:
console.assert(add(1, 2) === 3, '1+2 should be 3');
console.assert(add(0, 0) === 0, '0+0 should be 0');
console.log('All basic assertions passed');Простейшая проверка через console.assert.
**Простой:**
// Mocha + Chai
const { expect } = require('chai');
describe('Array', () => {
describe('.push()', () => {
it('should add element to end', () => {
const arr = [1, 2, 3];
arr.push(4);
expect(arr).to.deep.equal([1, 2, 3, 4]);
});
it('should increase length', () => {
const arr = [1, 2];
arr.push(3);
expect(arr).to.have.length(3);
});
});
});Mocha тест для встроенного метода массива.
**Реальный пример:**
// Реальный тест для функции
function formatPrice(amount, currency = 'RUB') {
return new Intl.NumberFormat('ru-RU', {
style: 'currency',
currency
}).format(amount);
}
describe('formatPrice', () => {
it('should format RUB', () => {
expect(formatPrice(1234.56)).to.equal('1 234,56 ₽');
});
it('should format USD', () => {
expect(formatPrice(99.99, 'USD')).to.equal('$99.99');
});
it('should handle zero', () => {
expect(formatPrice(0)).to.equal('0,00 ₽');
});
});Реальный тест: форматирование цен с разными валютами.
Частые ошибки
**Неправильно:** Писать тесты без проверки assertions
**Почему:** Тест без assertion ничего не проверяет — он всегда «проходит».
**Правильно:** В каждом it() должен быть expect() или assert.
**Неправильно:** Думать, что тестирование = 100% покрытие кода
**Почему:** Покрытие кода ≠ качество тестов. Тесты должны проверять поведение, а не каждую строку.
**Правильно:** Тестируйте поведение: «Что делает функция?» а не «Какую строку выполняет?»
**Неправильно:** Смешивать тесты и production код
**Почему:** Тесты не должны попадать в production bundle.
**Правильно:** Тесты в отдельных файлах (.test.js, .spec.js).
Важно запомнить
- describe — группа тестов
- it — один тест
- expect/assert — проверка результата
- Тесты = проверка поведения, а не строк кода
- Testing — отдельная инженерная дисциплина
Связь
Назад: Вы знаете функции (J9) и модули (J25). Тестирование объединяет их для обеспечения качества.
Вперёд: Вы прошли весь учебный план PROlab Academy! 🎉