Функция it

Функция it является основным строительным блоком тестов в Jasmine. Она определяет отдельный тестовый сценарий, который проверяет конкретное поведение кода. Каждый вызов it должен содержать описание теста и функцию с тестовой логикой.

it('должна правильно складывать два числа', function() {
    const result = add(2, 3);
    expect(result).toBe(5);
});

В этом примере 'должна правильно складывать два числа' — это текстовое описание, а функция содержит реальные проверки через expect.


Структура вызова it

Синтаксис функции it выглядит так:

it(description: string, testFunction: function, timeout?: number)
  • description — строка, описывающая, что проверяет тест.
  • testFunction — функция, в которой выполняются проверки. Может быть синхронной или асинхронной.
  • timeout — необязательный параметр, позволяющий задать максимальное время выполнения теста в миллисекундах.

Использование expect внутри it

Функция it сама по себе не выполняет проверок; проверки выполняются с помощью функции expect. Основные виды матчеров:

  • toBe — строгая проверка на равенство (===).
  • toEqual — проверка на эквивалентность объектов и массивов.
  • toContain — проверка, содержит ли массив или строка определённое значение.
  • toBeDefined / toBeUndefined — проверка наличия значения.
  • toBeNull / toBeTruthy / toBeFalsy — проверки на null, true или false в логическом контексте.

Пример комбинирования нескольких матчеров:

it('проверяет разные типы значений', function() {
    const value = getValue();
    expect(value).toBeDefined();
    expect(value).not.toBeNull();
    expect(value).toEqual({name: 'Alice', age: 30});
});

Асинхронные тесты

Для тестирования асинхронного кода Jasmine предоставляет несколько подходов:

1. Использование done колбэка

it('асинхронно получает данные', function(done) {
    fetchData(function(data) {
        expect(data).toBe('OK');
        done();
    });
});

Функция done сообщает Jasmine, что асинхронная операция завершена. Без её вызова тест будет считаться зависшим.

2. Использование async/await

it('асинхронная проверка с async/await', async function() {
    const data = await fetchDataAsync();
    expect(data).toBe('OK');
});

Такой подход делает код более читаемым и понятным, особенно при цепочках асинхронных операций.


Фокусировка и пропуск тестов

Jasmine позволяет фокусироваться на конкретных тестах или пропускать их:

  • fit — выполняет только этот тест, игнорируя все остальные.
  • xit — пропускает тест, не выполняя его.
fit('только этот тест будет выполнен', function() {
    expect(true).toBe(true);
});

xit('этот тест пропущен', function() {
    expect(false).toBe(true);
});

Это удобно при отладке или постепенном развитии тестового покрытия.


Вложенные тесты и структура

Функция it всегда используется внутри describe или другого блока it в сложных случаях, что позволяет структурировать тесты и группировать их логически:

describe('Математические операции', function() {
    it('сложение чисел', function() {
        expect(add(1, 2)).toBe(3);
    });

    it('вычитание чисел', function() {
        expect(subtract(5, 2)).toBe(3);
    });
});

Каждый it создаёт независимый тест, что позволяет легко изолировать ошибки и параллельно запускать тесты.


Практические рекомендации

  • Каждый it должен проверять одну конкретную вещь. Многочисленные проверки лучше разбивать на несколько it.
  • Описание теста должно быть чётким и читаемым, отражать ожидаемое поведение.
  • Асинхронные операции всегда должны завершаться через done или async/await.
  • Для временной отладки удобно использовать fit, но перед финальным запуском все fit должны быть заменены на it.

Функция it является основой тестирования в Jasmine, позволяя создавать структурированные, читаемые и изолированные тесты. Правильное использование it обеспечивает высокое качество и надёжность тестового покрытия.