当将spyOn与 jest 和typescript一起使用时,我收到此类型错误:
类型“Spy”不可分配给类型“SpyInstance<{}>”。'Spy' 类型中缺少属性 '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();
});
Run Code Online (Sandbox Code Playgroud)
当我运行此示例时,测试通过,但打字稿编译器失败。
全局spyOn(...)函数返回 a jasmine.Spynot a jest.SpyInstance。据我所知,这样做的原因是为了简化从 Jasmine 到 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');
Run Code Online (Sandbox Code Playgroud)
该node_modules\@types\jest\index.d.ts文件具有 Jest 类型定义。通过查看它们,我们可以看到spyOn.
spyOn返回一个jest.SpyInstance是内部的jest命名空间。spyOn返回一个jasmine.Spy是全局命名空间。除非您正在从 Jasmine 迁移到 Jest,否则我会使用该jest.spyOn函数而不是全局函数。
| 归档时间: |
|
| 查看次数: |
8420 次 |
| 最近记录: |