@tostershmoster

Почему проходит тест с разными значениями?

Почему Jest тест проходит с неверными значениями?

import { ISettings } from '../RangeSlider/types';
import { Model } from './Model';

let settings: ISettings;

function getPrivateMethod(methodName: string, settings: ISettings) {
  const modelProto = Model.prototype as any;
  const instance = Object.create(modelProto);
  return () => modelProto[methodName].call(instance, settings);
}

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

  test('"settings.min >= settings.max" should throw Error', () => {
    // тест не должен проходить при таких значениях, должен только при min > max
    settings.min = 1000;
    settings.max = 1500;

    const minIsBiggerThanMax = getPrivateMethod('validateSettings', settings);

    expect(minIsBiggerThanMax).toThrow();
  });
});


тестируемый код
private static validateSettings(settings: ISettings): void {
  if (settings.min >= settings.max) {
    throw new Error("'max' must be greater than 'min'");
  }
  // if (settings.valueFrom < settings.min) {
  //   throw new Error("'valueFrom' must be greater than 'min'");
  // }
  // if (settings.valueFrom > settings.valueTo) {
  //   throw new Error("'valueFrom' must be less than 'valueTo'");
  // }
  // if (settings.valueTo > settings.max) {
  //   throw new Error("'valueTo' must be less than 'max'");
  // }
  // if (settings.max - settings.min < settings.step) {
  //   throw new Error(`'step' must be less than ${settings.max - settings.min}`);
  // }
}


конструктор Model
constructor(settings: ISettings) {
  Model.validateSettings(settings);
  this.settings = settings;

  // default options
  this.minValue = this.settings.min;
  this.maxValue = this.settings.max;
  this.isTwoRunners = this.settings.isTwoRunners;
  this.isScaleVisible = this.settings.isScaleVisible;
  this.isVertical = this.settings.isVertical;
  this.isTooltipsVisible = this.settings.isTooltipsVisible;

  this.valueFrom = this.getThumbValue(this.settings, 'from');
  this.valueTo = this.getThumbValue(this.settings, 'to');

  this.step = this.getStepInPercents(this.settings.step);
  this.rangePercent = (this.settings.max - this.settings.min) / 100;

  this.getStepInPercents = this.getStepInPercents.bind(this);
}


Как вообще дебажить эти тесты? Не понятно где что отваливается. В браузере нет этих *.test.ts модулей. Инклудить их в код?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 2
Fragster
@Fragster
помогло? отметь решением!
Потому что функция не бросает исключение, а сама его перехватывает.
Нужно удалить try-catch обертку.
Ответ написан
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Во-первых, убрать try-catch из метода
Во-вторых
function getPrivateMethod(methodName: string, settings: ISettings) {
  const modelProto = Model.prototype as any;
  const instance = Object.create(modelProto);
  return () => modelProto[methodName].call(instance, settings);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы