Jest是否吞下console.log语句?有没有办法改变这个?

时间:2016-12-12 02:23:19

标签: javascript jestjs

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"?

我关心的主要原因是我正在写一些异步beforeAllafterAll的东西,我想使用console.log语句来调试事件的顺序。

5 个答案:

答案 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=dumbverbose: false或升级到版本24都行不通(我使用的是24.9),但我找到了解决方法。只需在控制台上监视即可看到结果。设置它:

const consoleSpy = jest.spyOn(console, 'log')

然后使用以下命令运行测试后查看呼叫:

consoleSpy.mock.calls[0][0]

更多信息在这里。