Как скрыть вывод JavaScript console.log в тестах Jest
Сегодня я работал в кодовой базе, в которой было много преднамеренных console.log
выходных данных во всех средах, кроме рабочей, поэтому они отображались в выходных данных тестов Jest. Было бы утомительно идти и удалять их по одному, поэтому я разработал эту простую настройку для одновременного подавления всего console.log
вывода во время работы Jest.
Настройка Есть
Этот трюк основан на природной способности Jest издеваться над чем угодно. Что мы в основном будем делать, так это имитировать log
метод console
объекта и оставлять другие методы нетронутыми.
Сначала нам нужно сказать Jest выполнить установочный файл перед запуском тестов. Для этого мы отредактируем jest.config.js
файл, который обычно находится в корне вашего проекта, с другими свойствами конфигурации и добавим следующую строку:
setupFilesAfterEnv: ['/src/jest.setup.js']
Мы можем проверить в документации Jest, что setupFilesAfterEnv
делает:
Список путей к модулям, которые запускают некоторый код для настройки или настройки среды тестирования перед выполнением каждого тестового файла в наборе.
Теперь, когда мы запустим наши тесты, они сначала выполнят то jest.setup.js
, что мы сейчас создадим.
Издевательство над console.log
Создайте файл src/setup.js
там или там, где вы указали путь на предыдущем шаге. Затем вы добавите к нему это:
global.console = {
log: jest.fn(),
debug: console.debug,
trace: console.trace,
}
Это переопределяет log
метод и разрешает другие. Так как я все же хотел иметь возможность что-то выводить в тестах, я сопоставил debug
и trace
. Вы можете сопоставить другие, которые могут вам понадобиться, например console.table
, отображающие элементы в таблице, полезные для регистрации объектов или массивов. Честно говоря, пока я не написал это, я никогда не заглядывал на страницу объекта консоли в MDN, и там есть много интересных методов, таких как тот console.dir
, который отображает интерактивный список свойств указанного объекта JavaScript .
Заключительные слова
Теперь ваш console.log
вывод подавляется, пока выполняются ваши тесты Jest. Если вы работаете в команде, убедитесь, что вы сообщили остальным членам команды об этом изменении, задокументировав его, поскольку кто-то может испытывать стресс, пытаясь console.log
что-то сделать, и не увидев, где это должно быть.