везде, где мне нужно winston
, если я console.log(winston)
, также приходят смоделированные функции
Вы создали Ручной макет для Node-модуля , создав__mocks__/winston.js
, что означает, что winston
"будет автоматически издеваться".
Обратите внимание, что издевательство над узлом модуля ведет себя не так, как издеваться над пользовательским модулем или издеваться над модулем ядра Node
, потому что модуль имитируется автоматически и вызов jest.mock
не требуется.
Другими словами, потому что__mocks__/winston.js
существует, этот макет будет автоматически возвращаться из require('winston')
в любом кода, выполняемого во время ваших тестов.
Iиздевались над сторонней библиотекой, используя jest.genMockFromModule('winston');
Вызов jest.genMockFromModule
в этой ситуации не требуется, поскольку winston
автоматически высмеивается.
Фактическивызов jest.genMockFromModule
заканчивается использованием «автоматической системы проверки для генерации проверенной версии» модуля, возвращаемоготребующий winston
, что в итоге означает, что вы издеваетесь над __mocks__/winston.js
.
Другими словами, в этой ситуации jest.genMockFromModule('winston');
в конечном итоге возвращает автоматический макет вашего ручного издевательства.
Что я здесь не так делаю?
Насмешка на __mocks__/winston.js
будет возвращена require('winston')
.
Для запроса фактического модуля во время тестового использованияjest.requireActual
:
const winstonMock = require('winston'); // this will return the mock
const winston = jest.requireActual('winston'); // this will return the actual module
Примечания:
jest.requireActual
добавлено в версии 21.0.0 jest.requireActual
не работал должным образом для модулей Node , пока не было исправлено с помощью PR 7404 , выпущенной в версии 24.0.0