Шутка насмешливый модуль - PullRequest
1 голос
/ 27 марта 2019

Я пишу юнит-тесты для узлового приложения, используя Jest. Код узла использует стороннюю библиотеку для регистрации информации.

В библиотеке есть функция getLogger, которую вы должны вызвать для возврата объекта регистратора.

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

const logger = require('third-party-libary').getLogger('myModule')
....
function submitSomething() {
   ....
   logger.info('log something')
}

В моем модульном тесте Jest я пытался смоделировать эти вызовы логгера разными способами, но безуспешно, и всегда возвращался как «регистратор не определен»

Я пытался:

jest.mock('third-party-library');
const loggerFactory = require('third-party-library');
const logger = {
   error: jest.fn(),
   info: jest.fn()
};
loggerFactory.getLogger.mockImplementation(() => logger);

Но всегда возвращается ошибка:

не может найти "информацию" для нулевого объекта

Я тоже это попробовал:

jest.mock('third-party-library')
const loggerFactory = require('third-party-library');
const logger = {
   error: jest.fn(),
   info: jest.fn()
};
loggerFactory.getLogger = () => logger

Я пробовал это:

jest.mock('third-party-library')
    const loggerFactory = require('third-party-library');
    const logger = {
       error: jest.fn(),
       info: jest.fn()
    };
    loggerFactory.getLogger = jest.fn(() => logger)

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

1 Ответ

0 голосов
/ 27 марта 2019

Ваш подход работает нормально, просто обратите внимание, что ваш код создает logger , как только он запускается , поэтому макет для getLogger должен быть на месте до код required

jest.mock('third-party-library');
const loggerFactory = require('third-party-library');
const logger = {
   error: jest.fn(),
   info: jest.fn()
};
// const { submitSomething } = require('./code');  <= would NOT work here
loggerFactory.getLogger.mockReturnValue(logger);
const { submitSomething } = require('./code');  // <= works here

test('submitSomething', () => {
  submitSomething();
  expect(logger.info).toHaveBeenCalledWith('log something');  // Success!
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...