Как правило, не рекомендуется использовать глобальные API-интерфейсы.И на всякий случай лучше выставить оригинальную функцию, по крайней мере, для целей тестирования.
Было бы проще протестировать ее, если бы она была более гибкой, например, исправленный код мог бы управляться с помощью переменных среды, если естьнеобходимо вернуться к исходному поведению:
console._logOriginal = console.log;
console.log = (...args) => {
if (
!process.env.NO_HMR_SPAM ||
(args.length === 0 || typeof args[0] !== 'string' || !args[0].includes('[HMR]'))
) {
console._logOriginal(...args);
}
};
В этом случае console._logOriginal
может быть подсмотрено.
В противном случае оригинал console.log
должен быть скопирован перед оценкой этого модуля, он не долженне может быть импортировано до этого:
const consoleLogOriginal = console.log;
it('...', async () => {
const consoleLogSpy = jest.spyOn(console, 'log');
await import('moduleThatManglesConsole');
console.log('[HMR]');
expect(consoleLogSpy).not.toHaveBeenCalled();
console.log('');
expect(consoleLogSpy).toHaveBeenCalledWith('');
})
afterEach(() => {
console.log = consoleLogOriginal;
});