Числовые матчеры

Числовые матчеры в Jest — это набор инструментов для выполнения точных проверок числовых значений в тестах. Они позволяют проверять различные характеристики чисел, такие как равенство, диапазоны, сравнение и другие критерии. Использование числовых матчеров помогает сделать тесты более выразительными и четкими, а также повысить читаемость и точность проверок.

Для проверки того, что два числа равны, используется матчеры toBe() и toEqual().

  • toBe() проверяет строгое равенство, что означает сравнение значений без преобразования типов. Этот матчинг наиболее эффективен для примитивных типов данных, включая числа.

Пример использования toBe():

test('проверка равенства чисел', () => {
  expect(2 + 2).toBe(4);
});
  • toEqual() может использоваться для проверки глубокой эквивалентности объектов и массивов. Для чисел результат будет аналогичен toBe(), но toEqual() более универсален, так как поддерживает сложные структуры данных.

Пример использования toEqual():

test('проверка эквивалентности чисел', () => {
  expect({ value: 2 + 2 }).toEqual({ value: 4 });
});

Однако, в контексте чисел использование toBe() предпочтительнее для простоты и ясности.

Несоответствие чисел

Для проверки, что два числа не равны, используется матчеры not.toBe() и not.toEqual().

Пример использования not.toBe():

test('проверка неравенства чисел', () => {
  expect(2 + 2).not.toBe(5);
});

Пример использования not.toEqual():

test('проверка неравенства чисел', () => {
  expect({ value: 2 + 2 }).not.toEqual({ value: 5 });
});

Проверка диапазонов

Для проверки чисел в определённом диапазоне можно использовать матчеры toBeGreaterThan(), toBeGreaterThanOrEqual(), toBeLessThan(), и toBeLessThanOrEqual(). Эти матчеры дают возможность удостовериться в том, что число находится в нужных границах.

  • toBeGreaterThan() проверяет, что значение больше заданного.

Пример:

test('проверка, что число больше', () => {
  expect(5).toBeGreaterThan(4);
});
  • toBeGreaterThanOrEqual() проверяет, что значение больше либо равно заданному.

Пример:

test('проверка, что число больше или равно', () => {
  expect(5).toBeGreaterThanOrEqual(5);
});
  • toBeLessThan() проверяет, что значение меньше заданного.

Пример:

test('проверка, что число меньше', () => {
  expect(3).toBeLessThan(4);
});
  • toBeLessThanOrEqual() проверяет, что значение меньше либо равно заданному.

Пример:

test('проверка, что число меньше или равно', () => {
  expect(3).toBeLessThanOrEqual(3);
});

Проверка с учетом точности

Для чисел с плавающей точкой стандартные матчеры toBe() и toEqual() могут не работать должным образом из-за особенностей представления чисел в JavaScript. В таких случаях используется матчеры toBeCloseTo().

toBeCloseTo() позволяет проверять, что два числа совпадают с заданной точностью, что особенно полезно при тестировании арифметических операций с плавающей точкой.

Пример:

test('проверка с точностью для чисел с плавающей точкой', () => {
  expect(0.1 + 0.2).toBeCloseTo(0.3, 5);
});

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

Использование матчеров с числами в объектах и массивах

В Jest можно комбинировать числовые матчеры с объектами и массивами. Например, если необходимо проверить, что в объекте определённое число соответствует заданным критериям, можно использовать методы expect() в сочетании с числовыми матчерами.

Пример:

test('проверка числовых значений в объекте', () => {
  const data = { value: 100 };
  expect(data.value).toBeGreaterThan(50);
});

Пример с массивом:

test('проверка числовых значений в массиве', () => {
  const numbers = [1, 2, 3, 4];
  expect(numbers[2]).toBeLessThan(5);
});

Советы по использованию числовых матчеров

  1. Используйте toBe() для простых числовых сравнений. Это делает ваш код лаконичным и точным.
  2. Для чисел с плавающей точкой используйте toBeCloseTo(), чтобы избежать ошибок при сравнении значений с малой погрешностью.
  3. Не забывайте про диапазоны. Для тестирования чисел в определённых границах используйте матчеры для сравнения: toBeGreaterThan(), toBeLessThan() и их вариации.
  4. Сочетание числовых матчеров с другими типами данных (например, объектами и массивами) помогает создавать гибкие и масштабируемые тесты.

Использование числовых матчеров в Jest позволяет легко и понятно тестировать числовые значения, обеспечивая высокую точность и минимизацию ошибок.