Ответ
Модульное тестирование — это метод проверки корректности работы отдельных, изолированных частей кода (юнитов), таких как функции, методы или классы. Основная цель — убедиться, что каждая единица логики ведёт себя ожидаемо при различных входных данных.
В контексте Node.js это особенно важно из-за его асинхронной природы. Для тестирования используются специальные библиотеки и подходы:
- Изоляция зависимостей: Внешние сервисы (базы данных, API) заменяются моками (mocks) или стабами (stubs) с помощью библиотек вроде
sinonили встроенных возможностей Jest. - Асинхронный код: Тесты должны корректно обрабатывать промисы и колбэки. Jest и Mocha предоставляют для этого специальный синтаксис (
async/await,done-колбэк). - Интеграция в процесс: Unit-тесты обычно выполняются быстро и являются частью пайплайна CI/CD.
Пример модульного теста для Node.js-функции с использованием Jest:
// utils/calculate.js
function calculateDiscount(price, discountPercent) {
if (price <= 0 || discountPercent < 0) {
throw new Error('Invalid input parameters');
}
return price * (1 - discountPercent / 100);
}
module.exports = { calculateDiscount };
// utils/calculate.test.js
const { calculateDiscount } = require('./calculate');
describe('calculateDiscount', () => {
test('should apply correct discount', () => {
expect(calculateDiscount(100, 20)).toBe(80);
});
test('should throw error for negative price', () => {
expect(() => calculateDiscount(-10, 5)).toThrow('Invalid input parameters');
});
test('should handle zero discount', async () => {
// Пример с асинхронным тестом, если бы функция была async
const result = calculateDiscount(100, 0);
expect(result).toBe(100);
});
});
Популярные инструменты в экосистеме Node.js: Jest (чаще всего, "из коробки" имеет всё необходимое), Mocha в связке с Chai (для assertions) и Sinon (для моков). Модульные тесты — это фундамент надёжности приложения, они позволяют безопасно рефакторить код и ловить регрессии на ранней стадии.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶