Як приховати висновок 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щось зробити, і не побачити це там, де воно повинно бути.