Numerical matchers — это специальные средства Jasmine для проверки числовых значений в тестах. Они позволяют сравнивать числа по точному значению, диапазону или относительной близости. Использование числовых матчеров повышает читаемость тестов и снижает вероятность ошибок при проверке чисел.
toBe()toBe() проверяет строгое равенство значений, аналогично
оператору ===. При работе с числами используется для
точного совпадения.
describe('toBe matcher', () => {
it('проверяет точное равенство чисел', () => {
const result = 10;
expect(result).toBe(10); // пройдёт
expect(result).not.toBe(5); // пройдёт
});
});
Особенности:
toEqual()toEqual() сравнивает значения с учётом структуры
объектов и массивов, но для чисел работает аналогично
toBe(). Отличие проявляется при сравнении сложных
структур.
describe('toEqual matcher', () => {
it('сравнивает числа и структуры', () => {
expect(5).toEqual(5); // пройдёт
expect([1, 2, 3]).toEqual([1, 2, 3]); // пройдёт
});
});
Особенности:
toBe() нет.toEqual() при сравнении
объектов с числовыми полями.toBeGreaterThan()
и toBeGreaterThanOrEqual()Эти матчеры проверяют числовые значения на большее или равное условие.
describe('Сравнение чисел', () => {
const value = 7;
it('value больше 5', () => {
expect(value).toBeGreaterThan(5); // пройдёт
});
it('value больше или равно 7', () => {
expect(value).toBeGreaterThanOrEqual(7); // пройдёт
});
});
Особенности:
toBeLessThan()
и toBeLessThanOrEqual()Эти матчеры являются обратными предыдущим и проверяют, что число меньше заданного значения или меньше либо равно ему.
describe('Сравнение чисел на меньшее', () => {
const value = 3;
it('value меньше 5', () => {
expect(value).toBeLessThan(5); // пройдёт
});
it('value меньше или равно 3', () => {
expect(value).toBeLessThanOrEqual(3); // пройдёт
});
});
Особенности:
toBeCloseTo()toBeCloseTo() используется для проверки чисел с
плавающей запятой, где прямое сравнение может быть ненадёжным из-за
особенностей представления чисел в JavaScript.
describe('Проверка чисел с плавающей запятой', () => {
const result = 0.1 + 0.2;
it('результат близок к 0.3', () => {
expect(result).toBeCloseTo(0.3, 5); // пройдёт, точность до 5 знаков
});
});
Особенности:
Jasmine позволяет комбинировать матчер с not для
отрицания условия:
describe('Отрицание числового матчера', () => {
const value = 10;
it('value не меньше 5', () => {
expect(value).not.toBeLessThan(5); // пройдёт
});
it('value не равно 5', () => {
expect(value).not.toBe(5); // пройдёт
});
});
Особенности:
not можно использовать с любым числовым матчером.toBe()
или toEqual().toBeCloseTo().toBeGreaterThan(), toBeGreaterThanOrEqual(),
toBeLessThan(), toBeLessThanOrEqual().not для отрицательных условий вместо
явного сравнения через if.describe('Числовые проверки', () => {
const score = 82.345;
it('score в пределах нормы', () => {
expect(score).toBeGreaterThan(80);
expect(score).toBeLessThan(100);
});
it('score близок к ожидаемому значению', () => {
expect(score).toBeCloseTo(82.34, 2);
});
it('score не равен минимальному значению', () => {
expect(score).not.toBe(0);
});
});
Такой подход делает тесты на числа ясными, точными и устойчивыми к изменениям реализации функций.