Jasmine — это мощный фреймворк для модульного тестирования
JavaScript, позволяющий создавать хорошо структурированные и читаемые
тесты. Одной из ключевых возможностей Jasmine является возможность
фокусироваться на отдельных наборах тестов, игнорируя
остальные, с помощью функции fdescribe.
fdescribeВ обычной практике для группировки тестов используется функция
describe:
describe('Массив чисел', () => {
it('должен содержать 3 элемента', () => {
expect([1, 2, 3].length).toBe(3);
});
it('должен содержать число 2', () => {
expect([1, 2, 3]).toContain(2);
});
});
Когда проект содержит десятки или сотни тестов, иногда требуется
сосредоточиться только на одной группе тестов,
игнорируя остальные. Для этого Jasmine предоставляет
fdescribe (focused describe):
fdescribe('Массив чисел', () => {
it('должен содержать 3 элемента', () => {
expect([1, 2, 3].length).toBe(3);
});
it('должен содержать число 2', () => {
expect([1, 2, 3]).toContain(2);
});
});
При использовании fdescribe только тесты внутри
этой группы будут выполняться, а все остальные
describe будут проигнорированы.
describe и fdescribe| Характеристика | describe |
fdescribe |
|---|---|---|
| Выполнение тестов | Все тесты внутри всех describe |
Только тесты внутри fdescribe |
| Поддержка вложенных наборов | Да | Да |
| Влияние на другие тесты | Нет | Игнорирует все describe, кроме текущего
fdescribe |
fdescribe удобен для локальной отладки
конкретного набора тестов без необходимости запускать весь тестовый
набор.
fdescribe и комбинацииМожно комбинировать обычные describe и
fdescribe. В случае вложенных структур приоритет
будет у fdescribe:
describe('Функции массива', () => {
it('map работает правильно', () => {
expect([1, 2].map(x => x * 2)).toEqual([2, 4]);
});
fdescribe('Методы фильтрации', () => {
it('filter возвращает только положительные числа', () => {
expect([-1, 0, 1, 2].filter(x => x > 0)).toEqual([1, 2]);
});
});
});
В этом примере выполнится только группа
Методы фильтрации, а тест
map работает правильно будет проигнорирован. Если несколько
fdescribe присутствуют одновременно, Jasmine
выполнит все фокусированные группы, игнорируя обычные
describe.
fit и xdescribefit — аналог it, позволяющий
фокусироваться на конкретном тесте внутри группы:describe('Массив чисел', () => {
fit('должен содержать число 2', () => {
expect([1, 2, 3]).toContain(2);
});
it('должен содержать 3 элемента', () => {
expect([1, 2, 3].length).toBe(3);
});
});
В этом случае выполнится только тест
должен содержать число 2.
xdescribe — полностью отключает набор тестов:xdescribe('Старые тесты', () => {
it('не будет выполняться', () => {
expect(true).toBe(false);
});
});
fdescribe и fit можно использовать
совместно, но важно помнить, что их не следует оставлять в коде
перед коммитом, иначе другие тесты будут игнорироваться.
fdescribe для быстрого запуска конкретного набора
тестов.fdescribe заменен на describe, чтобы весь
набор тестов выполнялся.beforeEach и
afterEach: все хуки в пределах
fdescribe выполняются так же, как в обычном
describe.fdescribe('Работа с объектами', () => {
let obj;
beforeEach(() => {
obj = { a: 1, b: 2 };
});
it('должен иметь свойство a', () => {
expect(obj.a).toBe(1);
});
it('должен иметь свойство b', () => {
expect(obj.b).toBe(2);
});
});
В этом примере beforeEach выполняется перед
каждым тестом внутри fdescribe, обеспечивая
корректную изоляцию тестов.
fdescribe игнорирует все обычные
describe, даже если они находятся в других
файлах.fdescribe Jasmine выполняет
все фокусированные наборы, что может иногда создавать
впечатление «неожиданного» поведения.fdescribe не должен использоваться в
CI/CD процессах, так как может случайно пропустить
важные тесты.fdescribe('Основные функции', () => {
beforeAll(() => console.log('Инициализация перед тестами'));
beforeEach(() => console.log('Перед каждым тестом'));
it('проверка функции 1', () => {
expect(1 + 1).toBe(2);
});
it('проверка функции 2', () => {
expect('abc'.toUpperCase()).toBe('ABC');
});
afterEach(() => console.log('После каждого теста'));
afterAll(() => console.log('Завершение набора тестов'));
});
Эта структура демонстрирует полное использование
fdescribe с хуками Jasmine, обеспечивая изоляцию тестов,
контроль над их порядком и полную управляемость при отладке.