据我所知,当运行脚本时,console.log()
应该可以毫无问题地打印到我的控制台的STDOUT。
但是在我的例子中,我将NPM配置为在从shell发出npm test
时运行Jest,并且测试文件中的任何console.log()
都不会在屏幕上打印任何内容。我还尝试使用process.stdout.write()
,但在运行npm test
时仍然没有自定义输出。
我应该如何调试我的测试脚本中的东西呢?我不能确定它是来自Node、NPM还是Jest的问题。有一个Jest issue看起来和我的类似,但我仍然不能解决并输出一个简单的字符串;而其余的Jest输出照常返回。
有人遇到过类似的问题吗?
- EDIT 1:**我尝试运行
npm test -- --runInBand
,但未显示日志。
- EDIT 1:**我尝试运行
备注
尝试重复运行命令,例如console.log('foo...');console.log('bar..');console.log('baz..');
我有时可以 * 看到日志 *,但这会被下面的Jest输出覆盖/隐藏。
3条答案
按热度按时间lzfw57am1#
从相关的问题,因为这个问题已经持续多年...
有a pull request in the alpha release将解决这个问题。看起来最后的提炼正在过去的几个小时内进行(见Github问题链接)。
不过,我找到了一个解决方案,适用于我最简单的情况:
这不会固定在每种情况下;也许异步/多线程/等仍然会有问题(请报告您的经验,以便我可以更新答案);例如,在日志后添加
process.exit(1)
将再次隐藏它。尝试在
process.exit()
运行之前按ctrl + c
(在正确的时间...)将显示日志实际上在那里并且被覆盖。我将用新闻更新答案,但这可能会帮助其他人开始使用Node/NPM/Jest设置!
Jest的GitHub问题提到了一些有用的细节/建议:
Jest替换了全局
console
模块;这显然是问题的根源,而且如果你运行一个测试,Jest会自动将其设置为true。upset_down_facet9aqgxwy2#
这是不干净的,但我有它的运气,希望它能帮助你,直到修复发布:在被覆盖的日志之后记录一些额外的
newline
s:ddrv8njm3#
我遇到了这个问题,结果发现在我的例子中,问题是在写入控制台后立即调用
process.exit(1)
。当您在Jest测试期间这样做时,输出似乎丢失了。我确定的(不完全令人满意的)变通方法是:
为此,需要在Jest安装脚本或其他地方将NODE_ENV环境变量设置为
test
。