Jest TypeError:不是 Jest.mock 中的构造函数

gir*_* TS 7 reactjs jestjs babel-jest jest-fetch-mock

我正在尝试使用 jest 编写一个单元测试用例,并且需要模拟以下模式。我收到 TypeError: 不是构造函数。

用例:我的用例如下所述

我的组件.js:

 import serviceRegistry from "external/serviceRegistry";


        serviceRegistry.getService("modulename", "servvice").then(
              service => {
                let myServiceInstance = new service();
                myServiceInstance.init(p,d) 
        })
Run Code Online (Sandbox Code Playgroud)

我的组件.spec.js

jest.mock('external/serviceRegistry', () => {
      return {
        getService: jest.fn(() => Promise.resolve({
          service: jest.fn().mockImplementation((properties, data, contribs) => {
            return {
              init: jest.fn(),
              util: jest.fn(),
              aspect: jest.fn()

            };
          })
        }))
      };
    }, {virtual: true});
Run Code Online (Sandbox Code Playgroud)

Bri*_*ams 3

Promise返回的值解析getServiceobject带有service设置为构造函数模拟的 prop,但您的代码期望它直接解析为构造函数模拟。

将您的external/serviceRegistry模拟更改为此,它应该可以工作:

jest.mock('external/serviceRegistry', () => {
  return {
    getService: jest.fn(() => Promise.resolve(
      jest.fn().mockImplementation((properties, data, contribs) => {
        return {
          init: jest.fn(),
          util: jest.fn(),
          aspect: jest.fn()
        };
      })
    ))
  };
}, {virtual: true});
Run Code Online (Sandbox Code Playgroud)