Как обрабатывать ошибки, используя тип подсказки Flow и Jest - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть определенный класс:

class MyClass{
  constructor(data:Array<any>){
    ...
  }
} 

И базовая тестовая настройка в Jest:

test('bad args', () => {
  expect(new MyClass()).toThrow();
  expect(new MyClass({})).toThrow();
  expect(new MyClass('string')).toThrow();
});

Я ожидаю, что это приведет к ошибке, поскольку подсказка типа не допускает пустых аргументов конструктора и ожидает, что первый аргумент будет массивом, а не объектом или строкой.

Может кто-нибудь помочь объяснить, как я уговариваю Jest выполнить код через Flow и ошибки, где типы неправильны?

EDIT: Я также бежал flow-typed install jest@23.6.0 //correct jest version

1 Ответ

0 голосов
/ 08 ноября 2018

В документе указано, что :

Бабель возьмет ваш код потока и удалит аннотации любого типа.

Итак, поток может помочь вам найти неправильный вызов перед сборкой (обычно во время разработки, в идеале). И как только вы запустите flow в своем проекте - вы можете обнаружить, где несоответствие подписи.

После компиляция аннотаций потока удаляется, и у вас есть чистый JavaScript.

Итак, если ваш конструктор принимает any arg, но допустим только массив, вы можете явно указать, что:

class MyClass {
  constructor(data:*) {
    if (!Array.isArray(data)) {
       throw new Exception('Bad argument');
    }
  }
}

Приведенная выше кодовая база будет работать, если вы также укажете data:Array<any>, но вы увидите ошибки во время компиляции (так что вы можете поймать, кто виноват :)).

...