Jestjs Mock.mockImplementation()不工作

Jestjs Mock.mockImplementation()不工作,jestjs,Jestjs,我有一个服务班 Service.js class Service { } export default new Service(); 我正试图为此提供一个模拟实现。如果我使用这样的东西: jest.mock('./Service', () => { ... my mock stuff }); 它工作正常,但是我无法访问在mock之外声明的任何变量,这有点限制,因为我想重新配置mock返回的内容,等等 我尝试了这个(受另一篇StackOverflow文章的启发:) 不幸的是,当我尝试运行

我有一个服务班

Service.js

class Service {
}
export default new Service();
我正试图为此提供一个模拟实现。如果我使用这样的东西:

jest.mock('./Service', () => { ... my mock stuff });
它工作正常,但是我无法访问在mock之外声明的任何变量,这有点限制,因为我想重新配置mock返回的内容,等等

我尝试了这个(受另一篇StackOverflow文章的启发:)

不幸的是,当我尝试运行此程序时,我遇到以下错误:

TypeError: _Service2.default.mockImplementation is not a function

嘲笑等于开玩笑。您需要调用jest.fn来创建模拟函数

因此:

jest.mock('./Service', () => jest.fn);
应该是:

jest.mock('./Service', () => jest.fn());

您需要将模拟组件存储在一个名称前缀为“mock”的变量中,并确保在从“main.js”文件中的默认属性导入服务时返回一个带有默认属性的对象


我和@Janos有同样的问题,其他答案也没有帮助。你可以做两件事:

  • 如果只需要模拟服务中的函数,请在测试文件中:

    从“/service”导入服务;
    jest.mock('./服务',()=>jest.fn());
    service.yourFunction=jest.fn(()=>{/*您的mock*/})
    

  • 如果需要模拟整个模块:

    假设您的service.js位于javascript/utils中,创建一个javascript/utils/_mocks_u,并在其中创建一个service.js文件,然后您可以在该文件中模拟整个类,例如:

    constmyobj={foo:bar}
    const myFunction1=jest.fn(()=>{return Promise.resolve(myObj)})
    常量myFunction2=。。。
    module.exports={
    我的职能1,
    我的职能2
    }
    
    然后在测试文件中添加:

    jest.mock('./javascript/utils/service')
    
    …从mockfile导出的函数将在测试文件执行过程中命中


  • 遇到了类似的问题,并通过使用.mockImplementationOnce解决了它

    jest.mock('./Service', () => jest.fn()
      .mockImplementationOnce(() => {
        return { ... mock stuff }
      })
      .mockImplementationOnce(() => {
       return { ... mock other stuff }
      })
    );
    

    现在,当您运行另一个测试时,它将返回第二个模拟对象。

    我有类似的问题,原因是“.spec.js”文件有一个

    import jest from "jest-mock";
    

    删除这一行后,它工作了。

    这是一个React本机项目(使用create React本机应用程序(又名expo)设置),Jest是20.0.4。节点:7.2.0,Npm:5.3.0这也不起作用。在本例中,service.mockImplementation甚至不存在。这不起作用,询问者明确提到它不起作用。这是问题的实际答案。投票最多不能解决的问题不是功能问题。
    jest.mock('./Service', () => jest.fn()
      .mockImplementationOnce(() => {
        return { ... mock stuff }
      })
      .mockImplementationOnce(() => {
       return { ... mock other stuff }
      })
    );
    
    import jest from "jest-mock";