如何使用Jest与jsdom来测试console.log?

时间:2017-06-03 14:10:22

标签: javascript unit-testing jestjs

我刚刚开始使用Jest,我已经成功编写了测试DOM的单元测试。我有一个library在屏幕上输入内容,所以我能够测试得很好。在某些情况下,我的图书馆会吐出console.warnconsole.log,而不是抛出错误。是否可以使用Jest来测试这些控制台消息是否正在发生?

2 个答案:

答案 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!')
}