Тестирование в JavaScript (Node.js): фреймворки и инструменты

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Тестирование в JavaScript (Node.js): фреймворки и инструменты

Качественное тестирование — неотъемлемая часть разработки на Node.js. Оно позволяет выявлять ошибки на ранних стадиях, упрощает рефакторинг и повышает надёжность приложений. В экосистеме JavaScript существует множество фреймворков и утилит для тестирования. В этой статье мы рассмотрим основные инструменты, их возможности и приведём практические примеры.

1. Основные типы тестов

Прежде чем выбирать инструмент, важно понимать, какие виды тестов вы будете писать:

  • Модульные (Unit) тесты — проверяют отдельные функции или модули изолированно.
  • Интеграционные тесты — проверяют взаимодействие между несколькими модулями, базой данных или внешними API.
  • End-to-End (E2E) тесты — симулируют действия пользователя в браузере или полном приложении.

2. Jest — универсальный фреймворк от Facebook

Jest — самый популярный фреймворк для тестирования JavaScript. Он включает в себя всё необходимое: тест-раннер, библиотеку утверждений (assertions), моки и встроенную поддержку покрытия кода.

Установка:

npm install --save-dev jest

Пример простого unit-теста для функции сложения:

// sum.js
function sum(a, b) {
  return a + b;
}
module.exports = sum;

// sum.test.js
const sum = require('./sum');

test('сложение 1 + 2 равно 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Запуск тестов:

npx jest

Преимущества Jest:

  • Нулевая конфигурация для проектов на React и Node.
  • Автоматический запуск в watch-режиме.
  • Встроенные моки и шпионы.
  • Поддержка асинхронного кода (async/await, callbacks).

3. Mocha + Chai — гибкая связка

Mocha — это гибкий тест-раннер, который не навязывает библиотеку утверждений. Чаще всего его используют вместе с Chai — библиотекой с понятным синтаксисом (should, expect, assert).

Установка:

npm install --save-dev mocha chai

Пример теста с Chai:

// calculator.js
function divide(a, b) {
  if (b === 0) throw new Error('Division by zero');
  return a / b;
}
module.exports = { divide };

// test.js
const { expect } = require('chai');
const { divide } = require('./calculator');

describe('Calculator', function() {
  it('should divide two numbers', function() {
    expect(divide(10, 2)).to.equal(5);
  });

  it('should throw error when dividing by zero', function() {
    expect(() => divide(10, 0)).to.throw('Division by zero');
  });
});

Запуск:

npx mocha test.js

Mocha особенно удобен, когда нужна тонкая настройка отчётов и интеграция с другими инструментами.

4. Supertest — тестирование HTTP-серверов

Supertest — это библиотека для интеграционного тестирования Express (и других) серверов. Она позволяет отправлять HTTP-запросы и проверять ответы.

Установка:

npm install --save-dev supertest

Пример теста для Express-приложения:

// app.js
const express = require('express');
const app = express();
app.get('/hello', (req, res) => res.json({ message: 'Hello World' }));
module.exports = app;

// app.test.js
const request = require('supertest');
const app = require('./app');

describe('GET /hello', function() {
  it('responds with json', function(done) {
    request(app)
      .get('/hello')
      .expect('Content-Type', /json/)
      .expect(200)
      .then(response => {
        expect(response.body.message).toBe('Hello World');
        done();
      });
  });
});

Supertest отлично сочетается с Jest или Mocha.

5. Sinon — моки, шпионы и стабы

Sinon — это автономная библиотека для создания тестовых двойников (test doubles). Она позволяет заменять функции, отслеживать вызовы и имитировать поведение зависимостей.

Установка:

npm install --save-dev sinon

Пример использования шпиона (spy):

const sinon = require('sinon');

function greet(name, cb) {
  cb(`Hello, ${name}`);
}

describe('greet function', function()                    

Рекомендаций