Я пытаюсь смоделировать класс, который создает и возвращает другой класс.У меня есть это:
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: А-а!