Как тестировать функцию которая возвращает число?

Есть такой метод в классе Scale

private getStepBetweenMarksInPx(
  lastMarkValueElement: HTMLElement,
  onePointInPx: number,
): number {
  const lastMarkValueSize: number = getElementLengthInPx(this.settings!, lastMarkValueElement);
  const lastMarkValueSizeInPoints: number = lastMarkValueSize / onePointInPx;
  const stepBetweenMarksInPoints: number = this.roundValueTo(lastMarkValueSizeInPoints, 10);
  return stepBetweenMarksInPoints * onePointInPx;
} 

так как функция getElementLengthInPx вычисляет длину элемента с помощью getBoundingClientRect, то перед тестом в прототип элемента добавляю такой код

Element.prototype.getBoundingClientRect = jest.fn(() => ({
  width: 300,
  height: 10,
  top: 100,
  left: 100,
  bottom: 110,
  right: 400,
  x: 100,
  y: 100,
  toJSON: () => {},
}));

Пишу для него тест

let settings: ISettings;

beforeEach(() => {
  settings = {
    min: 0,
    max: 1500,
    isTwoRunners: true,
    isScaleVisible: true,
    isVertical: true,
    isTooltipsVisible: true,
    valueFrom: 1000,
    valueTo: 1490,
    step: 10,
  };
});

describe('private getStepBetweenMarksInPx', () => {
  test('should return step between marks in px (number)', () => {
    const scale = new Scale();
    scale.settings = settings;
    scale.settings.isVertical = false;

    const lastMarkValueElement = scale.element.appendChild(scale['createMarkValue'](scale.settings.max, 500));

    const result = scale['getStepBetweenMarksInPx'](lastMarkValueElement, 0.8);
    expect(result).toBe(304);
  });
});

так нужно это тестировать? в чем смысл такого теста?

очевидно же что подобный тест будет выглядеть примерно так

expect(2+2).toBe(4);

а не так

expect(2+2).toBe(5);
expect(2+2).toBe('строка');

типы же входных параметров функции прописаны. в каком случае функция может выдавать не верный результат?


Ответы (0 шт):