我刚刚开始使用Jest,我已经成功编写了测试DOM的单元测试。我有一个library在屏幕上输入内容,所以我能够测试得很好。在某些情况下,我的图书馆会吐出console.warn
或console.log
,而不是抛出错误。是否可以使用Jest来测试这些控制台消息是否正在发生?
答案 0 :(得分:33)
你可以通过这样的间谍设置console.log:
global.console = {
warn: jest.fn(),
log: jest.fn()
}
// run your code
expect(global.console.log).toHaveBeenCalledWith('test')
由于您的测试文件在单独的主题中运行,因此您无需将console
重置为原始方法
答案 1 :(得分: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!')
})
OR ,您可以重新定义console
对象并添加具有jest.fn
值的键,如下所示:
describe('sayHello prints "Hello!"', () => {
const log = jest.fn()
global.console = { log }
sayHello()
expect(log).toHaveBeenCalledWith('Hello!')
}