typescript - Jest spyOn 不适用于 typescript : "Property ' mockRestore' is missing in type 'Spy' "

标签 typescript jestjs

使用时 spyOn使用 Jest 和 typescript ,我收到此类型错误:

Type 'Spy' is not assignable to type 'SpyInstance<{}>'. Property 'mockRestore' is missing in type '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();
});

当我运行此示例时,测试通过,但 typescript 编译器失败。

最佳答案

简答

全局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返回 jest.SpyInstancejest 里面命名空间。
  • spyOn返回 jasmine.Spy位于全局命名空间中。

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

    关于typescript - Jest spyOn 不适用于 typescript : "Property ' mockRestore' is missing in type 'Spy' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989032/

    相关文章:

    javascript - 如何测试返回 Promise 的方法

    javascript - 将变量从 Angular 2 构造器 then 语句传递到模板

    visual-studio - 如何在 Visual Studio 2017 中配置 TypeScript 和 Require

    javascript - 如何在 Jest 中测试异步 XMLHttpRequest 回调?

    javascript - Puppeteer 无法上传文件,出现 TypeError : Failed to fetch

    javascript - 如何让 JavaScript 代码更防弹?

    TypeScript 声明合并 - 更改属性类型

    testing - 为什么 Jest --runInBand 会加速测试?

    node.js - 用 Jest 模拟自定义事件发射器

    javascript - Jest/eslint 中函数缺少返回类型