Я просто настраиваюсь на Jest, и я успешно написал модульные тесты, которые тестируют DOM. У меня есть библиотека, которая набирает элементы на экране, поэтому я могу проверить все отлично. В некоторых случаях вместо того, чтобы бросать ошибку, моя библиотека выплевывает console.warn
или console.log
. Можно ли использовать Jest для проверки того, что эти сообщения консоли происходят?
Как использовать Jest с jsdom для тестирования console.log?
Ответ 1
Вы можете установить console.log с помощью такого шпиона:
global.console = {
warn: jest.fn(),
log: jest.fn()
}
// run your code
expect(global.console.log).toHaveBeenCalledWith('test')
Поскольку ваш тестовый файл работает в отдельном потоке, вам не нужно reset console
к исходным методам
Ответ 2
Предположим, вы хотите проверить такую функцию, напечатав сообщение:
function sayHello () { console.log('Hello!') }
Вы можете использовать функцию jest.spyOn
, чтобы изменить поведение функции console.log
.
describe('sayHello prints "Hello!"', () => {
const log = jest.spyOn(global.console, 'log')
sayHello()
expect(log).toHaveBeenCalledWith('Hello!')
})
ИЛИ вы можете переопределить объект console
и добавить ключ со значением jest.fn
, например:
describe('sayHello prints "Hello!"', () => {
const log = jest.fn()
global.console = { log }
sayHello()
expect(log).toHaveBeenCalledWith('Hello!')
}