Функция describe

Функция describe является основой организации тестов в Jasmine и используется для группировки связанных спецификаций. Она позволяет логически объединять наборы тестов, создавая читаемую структуру и упрощая поддержку большого количества тестов.

Синтаксис

describe(description, specDefinitions);
  • description — строка, описывающая группу тестов. Используется для информативного вывода при запуске тестов.
  • specDefinitions — функция, внутри которой определяются отдельные тесты (it) или вложенные группы (describe).

Пример базового использования:

describe('Массивы', function() {
    it('должен содержать элемент после добавления', function() {
        const arr = [];
        arr.push(1);
        expect(arr).toContain(1);
    });
});

Вложенные describe

Jasmine поддерживает вложенные describe, что позволяет создавать иерархию тестов. Это особенно полезно при тестировании сложных объектов или модулей с множеством функций.

describe('Строки', function() {
    describe('Метод toUpperCase', function() {
        it('должен преобразовывать все буквы в верхний регистр', function() {
            expect('abc'.toUpperCase()).toBe('ABC');
        });
    });

    describe('Метод includes', function() {
        it('должен возвращать true, если подстрока присутствует', function() {
            expect('hello world'.includes('world')).toBe(true);
        });
    });
});

Ключевой момент: вложенные describe не создают отдельный контекст выполнения, они лишь структурируют вывод тестов и объединяют наборы спецификаций.

Использование beforeEach и afterEach внутри describe

describe позволяет локально определять хуки beforeEach и afterEach, которые выполняются перед и после каждого теста внутри данной группы.

describe('Объекты', function() {
    let obj;

    beforeEach(function() {
        obj = { a: 1, b: 2 };
    });

    it('должен содержать ключ a', function() {
        expect(obj.a).toBe(1);
    });

    it('должен содержать ключ b', function() {
        expect(obj.b).toBe(2);
    });

    afterEach(function() {
        obj = null;
    });
});

Особенность: вложенные beforeEach и afterEach выполняются в порядке иерархии сверху вниз. Это позволяет создавать общие условия для группы тестов и при необходимости добавлять дополнительные действия для более узких контекстов.

Общие рекомендации по использованию

  • Описательные названия — строки description должны четко отражать тестируемую функциональность.
  • Структурирование по функционалу — группировка тестов по методам, модулям или компонентам упрощает понимание результатов тестирования.
  • Комбинация с хуками — использование beforeEach и afterEach внутри describe снижает дублирование кода и повышает читаемость.
  • Вложенность — рекомендуется не превышать 2–3 уровней вложенности, чтобы не усложнять структуру и вывод тестов.

Отличия describe от it

  • describe — создаёт контейнер для набора тестов, не выполняет проверок самостоятельно.
  • it — выполняет конкретную проверку и содержит утверждения (expect).

Пример интеграции:

describe('Калькулятор', function() {
    describe('Метод сложения', function() {
        it('должен возвращать сумму двух чисел', function() {
            const result = 2 + 3;
            expect(result).toBe(5);
        });
    });

    describe('Метод вычитания', function() {
        it('должен возвращать разницу двух чисел', function() {
            const result = 5 - 3;
            expect(result).toBe(2);
        });
    });
});

Вывод информации при запуске тестов

describe формирует читабельный иерархический вывод в консоли, где каждая группа и подгруппа отображается с отступами. Это позволяет быстро идентифицировать успешные и проваленные тесты, особенно при большом объеме спецификаций.