Jest spyOn не работает с машинописным шрифтом: «Свойство mockRestore отсутствует в типе« Шпион »» - PullRequest
0 голосов
/ 31 декабря 2018

При использовании spyOn с шуткой и машинописью я получаю сообщение об ошибке этого типа:

Тип «Шпион» не может быть назначен типу «SpyInstance <{}>».Свойство 'mockRestore' отсутствует в типе 'Spy'.

Вот пример кода, который вызывает его:

class A {
  foo = () => this.bar() + 1;
  bar = () => 1;
}

test('should pass', () => {
  const a = new A();
  let barSpy: jest.SpyInstance;
  barSpy = spyOn(a, 'bar');
  a.foo();
  expect(barSpy).toHaveBeenCalled();
});

Когда я запускаю этот пример, тест проходит, нокомпилятор машинописного текста не работает.

1 Ответ

0 голосов
/ 01 января 2019

Короткий ответ

Глобальная функция spyOn(...) возвращает jasmine.Spy, а не jest.SpyInstance.Причина этого, насколько я могу судить, состоит в том, чтобы облегчить миграцию из Жасмин в Jest.

Вот два варианта:

let barSpy: jest.SpyInstance;
barSpy = jest.spyOn(a, 'bar'); // <--- explicitly use jest.spyOn

// or

let barSpy: jasmine.Spy; // <--- use jasmine.Spy as your type
barSpy = spyOn(a, 'bar');

Дальнейшее объяснение

Файл node_modules\@types\jest\index.d.ts имеет определения типа Jest.Глядя на них, мы видим две реализации spyOn.

  • spyOn, который возвращает jest.SpyInstance, находится внутри пространства имен jest.
  • spyOn, который возвращает jasmine.Spy, находится в глобальном пространстве имен.

Если вы не переходите с Jasmine на Jest, я бы использовал функцию jest.spyOn вместо глобальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...