Jasmine — это фреймворк для модульного тестирования в JavaScript, который позволяет создавать читаемые и легко поддерживаемые тесты. Основной единицей тестирования является спецификация (spec), которая представляет собой логический блок, описывающий поведение тестируемого кода. Каждый тестовый файл в Jasmine имеет определённую структуру, которая обеспечивает ясность и модульность.
describedescribe — это функция высшего уровня, которая
группирует связанные тесты. Она принимает два аргумента:
Пример структуры блока describe:
describe('Математические операции', function() {
// Тесты и вспомогательные функции будут здесь
});
Ключевые моменты использования describe:
describe друг в друга, создавая
иерархию тестов.describe может содержать как сами тесты
(it), так и подготовительные/очистительные функции
(beforeEach, afterEach).itit — функция, описывающая конкретный тест. Она также
принимает два аргумента:
expect.Пример:
it('должно складывать два числа корректно', function() {
let result = add(2, 3);
expect(result).toBe(5);
});
Особенности it:
должно, возвращает, генерирует),
чтобы описание было читаемым.beforeEach и afterEachJasmine позволяет выполнять код до и после каждого теста в блоке
describe с помощью beforeEach и
afterEach.
describe('Работа с массивом', function() {
let arr;
beforeEach(function() {
arr = [1, 2, 3];
});
afterEach(function() {
arr = [];
});
it('должен добавлять элемент в массив', function() {
arr.push(4);
expect(arr.length).toBe(4);
});
});
Преимущества использования этих функций:
expectexpect — центральная функция Jasmine для проверки
результатов. Она принимает значение и позволяет использовать
матчеры (matchers), которые определяют
условия успешного теста.
Примеры матчеров:
expect(value).toBe(expected); // строгая проверка на равенство
expect(value).toEqual(expected); // глубокое сравнение объектов
expect(value).toContain(item); // проверка содержимого массива или строки
expect(value).toBeTruthy(); // проверка на truthy значение
expect(value).toBeFalsy(); // проверка на falsy значение
expect(func).toThrow(); // проверка выброса исключения
Каждый тест может содержать несколько вызовов expect, но
желательно, чтобы проверяемые сценарии были логически разделены.
Структура тестового файла в Jasmine обычно строится следующим образом:
describe — логическая
сегментация по функциональности.beforeEach /
afterEach — установка исходного состояния.it — конкретные проверки.Пример полной структуры:
import { add, multiply } from './math.js';
describe('Математические функции', function() {
let a, b;
beforeEach(function() {
a = 2;
b = 3;
});
afterEach(function() {
a = 0;
b = 0;
});
describe('Сложение', function() {
it('должно возвращать сумму двух чисел', function() {
expect(add(a, b)).toBe(5);
});
});
describe('Умножение', function() {
it('должно возвращать произведение двух чисел', function() {
expect(multiply(a, b)).toBe(6);
});
});
});
describe,
чтобы при запуске тестов в консоли сразу было понятно, какая
функциональность проверяется.beforeEach.it.Строгая организация и соблюдение этих принципов позволяет создавать устойчивые и легко поддерживаемые тесты, которые остаются понятными даже при масштабировании проекта.