получить актуальную функцию при издевательстве над всем модулем - PullRequest
0 голосов
/ 02 февраля 2019

С этого момента я издевался над сторонней библиотекой, используя jest.genMockFromModule('winston');, где бы мне ни потребовалось winston, если я console.log(winston), то также поступают смоделированные функции.Но это должно быть только в файле теста.

Что я здесь не так делаю?

__mocks__
   winston.js
const winston = jest.genMockFromModule('winston');

logger.js

const winston = require('winston')

console.log(winston) // object consist of mockFunctions

1 Ответ

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

везде, где мне нужно 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...