【问题标题】:How to mock object in jest如何开玩笑地模拟对象
【发布时间】:2020-08-20 10:09:36
【问题描述】:

我正在尝试使用 Jest 和 Typescript 模拟对象的函数,但它不起作用。这是我所拥有的简短版本:

// myModule.ts

export const Foo = {
  doSomething: () => {
    // ... does something
    console.log('original implementation');
  }
}

然后在我的测试中:

jest.mock('.myModule.ts', () => {
  return {
    Foo: {
      doSomething: jest.fn().mockImplementation(() => {
        console.log('mock implementation')
      })
    }
  }
})

// .. further down in the test
Foo.doSomething();

当我调用Foo.doSomething() 时,不应该调用console.log('mock implementation') 吗?它不会出错,也不会再调用原始实现,但也不会调用我的 mockImplementation。

【问题讨论】:

    标签: typescript unit-testing jestjs


    【解决方案1】:

    切换到 jest 26.6 后,我发现这些都不能在测试之外工作(一直在我的导入下直接执行,在任何 describeit 调用之外)。如果我想要任何类型的模拟实现,我必须在测试中或beforeEach 中设置它。如果有人可以提供有关此文档的链接,我将不胜感激。

    【讨论】:

      【解决方案2】:

      试试这个:

      import { Foo } from './foo';
      
      jest
        .spyOn(Foo, 'doSomething')
        .mockImplementation(() => console.log('mock implementation'));
      
      Foo.doSomething();
      

      【讨论】:

      • 太棒了,谢谢,它立即起作用并且非常简单!
      猜你喜欢
      • 2021-07-03
      • 2018-10-23
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2022-12-24
      • 2019-12-21
      相关资源
      最近更新 更多