console.log语句在Jest中不输出任何内容。昨天还挺管用的,今天突然就不管用了。我没有对我的配置做任何更改,也没有安装任何更新。

我没有使用——forceExit选项。仍然看到这个问题。


当前回答

除了前面提到的——verbose选项会导致这个错误外,注意——watch也可能导致这个错误。

其他回答

你可以像这样一起运行两个选项——watch——verbose false,如果你还想监视文件并查看输出。

只运行一次就做——冗长的错误

尝试使用console.debug()代替。

在测试函数中运行console.debug('Message here', yourValueHere),它应该在运行测试脚本时显示在控制台输出中。您可以使用Ctrl+F验证它是否工作,并在标准输出中找到Message。

这是在控制台中显示输出的技巧,虽然这不是一个关于如何使用console.log的答案,我理解。

我运行@test -library/jest-dom和jest-junit 12.0.0作为开发依赖。 joke -junit的最小配置为

  "jest-junit": {
    "usePathForSuiteName": "true"
  },

在package.json。这主要用于配置覆盖率报告。 Jest是这样配置的:

  "jest": {
    "testMatch": [
      "**/__tests__/**/*.[jt]s?(x)",
      "**/?(*.)+(spec|test).[jt]s?(x)",
      "!**/utilities.ts",
    ],

尝试了关于jest配置设置的建议,但无济于事。相反,在我的案例中,问题似乎与不等待异步代码有关:

test("test", async () => {
  console.log("Does output")

  new Promise(resolve => {
    // some expectation depending on async code
    setTimeout(() => resolve(console.log("Does not output")) , 1)
  })
})

相反,等待promise会输出async日志:

test("test", async () => {
  console.log("Does output")

  await new Promise(resolve => {
    // some expectation depending on async code
    setTimeout(() => resolve(console.log("Does output")) , 1)
  })
})

可能相关背景: https://github.com/facebook/jest/issues/2441

在我的案例中,问题是当需要模块时,在实际测试用例开始之前,日志就被记录了下来。从顶级导入更改为在测试用例中使用require解决了这个问题。

在MacOS的笑话版本26.6.3中,我必须附加——silent="false"