【问题标题】:Jest spyOn not working with typescript: "Property 'mockRestore' is missing in type 'Spy'"Jest spyOn 不使用打字稿:“'Spy' 类型中缺少属性 'mockRestore'”
【发布时间】:2019-01-01 07:04:33
【问题描述】:

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();
});

当我运行这个例子时,测试通过了,但是打字稿编译器失败了。

【问题讨论】:

    标签: typescript jestjs


    【解决方案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 的两个实现。

    • 返回jest.SpyInstancespyOn 位于jest 命名空间内。
    • 返回jasmine.SpyspyOn 位于全局命名空间中。

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

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2017-11-18
      • 2017-12-22
      • 2021-09-23
      • 2023-02-07
      • 2021-04-29
      • 2013-09-17
      • 2019-05-02
      相关资源
      最近更新 更多