Jest spyOn无法与打字稿一起使用:“类型'Spy'中缺少属性'mockRestore'”

时间:2018-12-31 15:28:35

标签: typescript jestjs

spyOn与笑话和打字稿一起使用时,出现此类型错误:

  

类型'Spy'不可分配给类型'SpyInstance <{}>'。属性   “间谍”类型中缺少“ mockRestore”。

以下是导致它的代码示例:

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 :(得分:1)

简短回答

全局spyOn(...)函数返回jasmine.Spy而不是jest.SpyInstance。据我所知,这样做的原因是ease migration from Jasmine to 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的{​​{1}}在jest.SpyInstance命名空间内。
  • 返回jest的{​​{1}}在全局名称空间中。

除非您正在从Jasmine迁移到Jest,否则我将使用spyOn函数而不是全局函数。