Jest не насмешливый модуль при использовании "doMock", чтобы избежать подъема - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь смоделировать класс, который создает и возвращает другой класс.У меня есть это:

const mockMethod = jest.fn();

const mockClassA = jest.fn<ClassA>(() => ({
  method: mockMethod
}));

jest.mock("../src/ClassB", () => ({
  ClassB: {
    getClassA: () => new mockClassA()
  }
}));

Это ловится из-за подъема, mockClassA не определено, когда шутка издевается `../src/ClassB".

Iпрочитал, если вы не хотите поднимать, просто используйте doMock вместо:

При использовании babel-jest вызовы mock будут автоматически перемещаться в верхнюю часть блока кода. Используйте этометод, если вы хотите явно избежать этого поведения.

https://jestjs.io/docs/en/next/jest-object#jestdomockmodulename-factory-options

Когда я запускаю с mock, я получаю TypeError: mockClassA is not a constructor, так как mockClassA не определен, потому что mock поднимается над определением для mockClassA.

Когда я изменяю mock на doMock, он просто не издевается над модулем - он использует реальную вещь.


Редактировать: Объявление их в строке означает, что я не могу легко получить доступ к проверенным методам проверки:

jest.mock("../src/ClassB", () => ({
  ClassB: {
    getClassA: () => ({
      method: jest.fn()
    })
  }
}));

Поскольку getClassA является функцией, она возвращает отдельный экземпляр объектас помощью method.


Редактировать 2: А-а!

1 Ответ

0 голосов
/ 03 апреля 2019

Я думаю, что у вас есть 2 варианта здесь:

  1. используйте jest.mock, вставьте mockClassA и mockMethod, выставьте их в макет и затем импортируйте из '../src/ClassB'
  2. используйте doMock, но используйте динамический require в вашем тестовом примере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...