将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();
});
当我运行此示例时,测试通过,但打字稿编译器失败。
答案 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
函数而不是全局函数。