Як приховати висновок console.log JavaScript у тестах Jest
Сьогодні я працював над кодовою базою, яка мала багато навмисних console.log
виводів у всіх середовищах, крім робочих, тому вони з’являлися у виводі тестів Jest. Було б утомливо видаляти їх один за іншим, тому я розробив цю просту установку, щоб придушити весь console.log
вихід одночасно, коли 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
щось зробити, і не побачити це там, де воно повинно бути.