Jest是否吞下console.log
输出?
// __tests__/log.test.js
it('logs', () => {
console.log('hey') // expect to see "hey" printed in terminal
})
// terminal output
$ jest --forceExit
PASS __tests__/log.test.js
✓ logs (1ms) # where's "hey"?
我关心的主要原因是我正在写一些异步beforeAll
和afterAll
的东西,我想使用console.log语句来调试事件的顺序。
答案 0 :(得分:10)
这似乎是ongoing issue。
在Node 10.7.0和Jest 23.4.1中,将verbose: false
添加到jest配置(per this suggestion)中对我来说很有效。
修改
现在我已进入Jest 23.6,根据Tamlyn的回答,我还需要将TERM=dumb
作为环境变量传递。
答案 1 :(得分:7)
问题在于我使用的是jest --forceExit
。 Jest的日志记录模型会保存所有日志并在以后将其吐出。 --forceExit
导致进程在到达spit-out-logs点之前保释。
答案 2 :(得分:6)
更新:此问题应已解决as of Jest 24。
current bug影响--watch
模式下的测试的另一部分解决方案是将TERM=dumb
作为环境变量传递。
TERM=dumb jest --watch
这样做的代价很小,因为它不会在每次测试运行前清除控制台,因此您必须滚动查看结果。
答案 3 :(得分:1)
尝试将--verbose
添加到Jest参数中。
这对我有用。
答案 4 :(得分:0)
尽管不幸的是,TERM=dumb
,verbose: false
或升级到版本24都行不通(我使用的是24.9),但我找到了解决方法。只需在控制台上监视即可看到结果。设置它:
const consoleSpy = jest.spyOn(console, 'log')
然后使用以下命令运行测试后查看呼叫:
consoleSpy.mock.calls[0][0]
更多信息在这里。