Jest TypeError: не является конструктором в Jest.mock - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь написать пример модульного теста, используя jest, и мне нужно смоделировать приведенный ниже шаблон.Я получаю TypeError: не является конструктором.

Вариант использования: Мой сценарий использования, как указано ниже

MyComponent.js:

 import serviceRegistry from "external/serviceRegistry";


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

Mycomponent.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});

1 Ответ

0 голосов
/ 21 февраля 2019

Promise, возвращаемое getService, преобразуется в object с service реквизитом, установленным для вашего макета конструктора, но ваш код ожидает, что он разрешится непосредственно к вашему макету конструктора.

Измените 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});
...