NodeJS 运行“npm测试”(jest)时,STDOUT没有console.log

emeijp43  于 2023-01-25  发布在  Node.js
关注(0)|答案(3)|浏览(217)

据我所知,当运行脚本时,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,但未显示日志。

备注

尝试重复运行命令,例如
console.log('foo...');console.log('bar..');console.log('baz..');
我有时可以 * 看到日志 *,但这会被下面的Jest输出覆盖/隐藏。

lzfw57am

lzfw57am1#

从相关的问题,因为这个问题已经持续多年...
a pull request in the alpha release将解决这个问题。看起来最后的提炼正在过去的几个小时内进行(见Github问题链接)。
不过,我找到了一个解决方案,适用于我最简单的情况:

  • 只要运行启用 verbose 模式,日志就会神奇地出现!
npm test -- --verbose=true

不会固定在每种情况下;也许异步/多线程/等仍然会有问题(请报告您的经验,以便我可以更新答案);例如,在日志后添加process.exit(1)将再次隐藏它。
尝试在process.exit()运行之前按ctrl + c(在正确的时间...)将显示日志实际上在那里并且被覆盖。
我将用新闻更新答案,但这可能会帮助其他人开始使用Node/NPM/Jest设置!
Jest的GitHub问题提到了一些有用的细节/建议:

  • https://github.com/facebook/jest/issues/2441#issuecomment-713433790
  • https://github.com/facebook/jest/issues/2441#issuecomment-724131782
  • https://github.com/facebook/jest/issues/2441#issuecomment-586359238
  • https://github.com/facebook/jest/issues/2441#issuecomment-611122871
  • https://github.com/facebook/jest/issues/2441#issuecomment-623856169
  • 和...https://github.com/facebook/jest/issues/2441#issuecomment-649391333

Jest替换了全局console模块;这显然是问题的根源,而且如果你运行一个测试,Jest会自动将其设置为true。upset_down_face

t9aqgxwy

t9aqgxwy2#

这是不干净的,但我有它的运气,希望它能帮助你,直到修复发布:在被覆盖的日志之后记录一些额外的newline s:

console.log('I want to be seen!');
console.log('\n\n\n\n');
ddrv8njm

ddrv8njm3#

我遇到了这个问题,结果发现在我的例子中,问题是在写入控制台后立即调用process.exit(1)。当您在Jest测试期间这样做时,输出似乎丢失了。
我确定的(不完全令人满意的)变通方法是:

console.warn('stuff I want to write to the console');

if (process.env.NODE_ENV === 'test') {
  setTimeout(() => process.exit(1), 1000);
} else {
  process.exit(1);
}

为此,需要在Jest安装脚本或其他地方将NODE_ENV环境变量设置为test

相关问题