Функция expect является ключевым элементом тестирования
в Jasmine. Она используется для проверки значений и определения того,
соответствует ли фактический результат ожидаемому. Все утверждения в
Jasmine строятся вокруг вызова expect, который возвращает
объект с набором матчеров (matchers), позволяющих задавать различные
условия проверки.
expect(actualValue).toBe(expectedValue);
actualValue — фактическое значение,
полученное в ходе выполнения теста.expectedValue — значение, с которым
производится сравнение.toBe — один из стандартных матчеров
Jasmine, проверяющий строгое равенство (===).Пример:
describe("Проверка чисел", function() {
it("должна подтверждать равенство чисел", function() {
const result = 5;
expect(result).toBe(5);
});
});
Jasmine предоставляет разнообразные матчеры, которые делятся на несколько категорий:
1. Проверка равенства и типов
toBe(value) — строгая проверка равенства
(===).toEqual(value) — проверка структурного равенства
объектов или массивов.toBeTruthy() — проверка, что значение истинно.toBeFalsy() — проверка, что значение ложно.toBeNull() — проверка на null.toBeUndefined() — проверка на
undefined.toBeNaN() — проверка на NaN.expect({a: 1}).toEqual({a: 1});
expect(true).toBeTruthy();
expect(null).toBeNull();
2. Числовые проверки
toBeGreaterThan(number) — проверяет, что значение
больше числа.toBeLessThan(number) — проверяет, что значение меньше
числа.toBeCloseTo(number, precision) — проверка чисел с
плавающей точкой с заданной точностью.expect(10).toBeGreaterThan(5);
expect(3.1415).toBeCloseTo(3.14, 2);
3. Проверка строк
toMatch(regexp) — проверка строки на соответствие
регулярному выражению.expect("Hello World").toMatch(/World/);
4. Проверка массивов и объектов
toContain(item) — проверка наличия элемента в
массиве.toHaveBeenCalled() — проверка вызова
функции-шпиона.toHaveBeenCalledWith(...args) — проверка вызова функции
с конкретными аргументами.const spy = jasmine.createSpy('myFunction');
spy('test');
expect(spy).toHaveBeenCalled();
expect(spy).toHaveBeenCalledWith('test');
Все матчеры могут использоваться с отрицанием через
.not, что позволяет проверять обратные условия:
expect(5).not.toBe(10);
expect([1,2,3]).not.toContain(4);
expect(null).not.toBeTruthy();
Отрицание .not можно комбинировать с любым матчером,
расширяя гибкость тестирования.
expect можно использовать вместе с асинхронными тестами
через async/await или колбэки, что особенно важно при
работе с промисами.
it("должен получить данные с сервера", async function() {
const data = await fetchData();
expect(data).toBeDefined();
expect(data.length).toBeGreaterThan(0);
});
При использовании Jasmine версии 3 и выше также доступна функция
done для синхронизации завершения асинхронных операций:
it("асинхронный тест с done", function(done) {
setTimeout(function() {
expect(true).toBe(true);
done();
}, 100);
});
Jasmine позволяет создавать собственные матчеры, расширяя стандартный набор проверок. Это полезно для специфических условий в проекте.
beforeEach(function() {
jasmine.addMatchers({
toBeEven: function() {
return {
compare: function(actual) {
const result = {};
result.pass = (actual % 2 === 0);
result.message = result.pass ? `${actual} является чётным` : `${actual} не является чётным`;
return result;
}
};
}
});
});
it("проверка на четность", function() {
expect(4).toBeEven();
expect(5).not.toBeEven();
});
Создание кастомных матчеров позволяет сократить повторяющийся код и сделать тесты более читабельными и выразительными.
expecttoBe для примитивов, toEqual для
объектов).async/await..not с матчерами для проверки обратных
условий.Функция expect в Jasmine формирует основу всего процесса
тестирования, позволяя проверять значения, поведение функций и
асинхронные операции с высокой точностью и наглядностью. Ее гибкость и
расширяемость делают тесты более структурированными и читаемыми, а
использование правильных матчеров существенно повышает качество
тестового покрытия.