在Jest中,Console.log语句根本没有输出任何内容

Hin*_*ood 41 console.log jestjs

console.log语句在Jest中根本没有输出任何内容.昨天这对我有用,突然之间,它今天不起作用了.我对配置进行了零更改,但没有安装任何更新.

我没有使用该--forceExit选项.仍然看到这个问题.

Mik*_*hke 101

这是一个相当老的问题,但仍然没有公认的答案。但是,建议的解决方案都不适合我(诸如 --silent --verbose 等设置)。主要问题是 Jest 更改了全局console对象。因此,最简单的解决方案是不使用全局console对象。

相反,从控制台模块导入专用日志函数并使用这些函数:

import { error } from "console";

error("This is an error");
Run Code Online (Sandbox Code Playgroud)

就这么简单。

  • 唯一适合我的解决方案,谢谢!我做了 `import { log } from 'console'`,并使用 `log` 而不是 `console.log`。 (5认同)

Oux*_* Hu 53

Jest 默认禁止控制台日志消息。为了显示控制台日志消息,在命令行中将silent选项设置为false

--silent=false 在命令行中设置:

npm run test -- --silent=false

  • 即使使用此标志后,在监视模式下,当重新触发测试时,jest 也不会发出控制台日志 (4认同)

小智 36

根据https://github.com/facebook/jest/issues/2441上的评论,

尝试在package.json中的jest选项中设置verbose:false(或删除它).

  • 只是要添加此内容,如果您在命令行标志中有“ --verbose”,则也需要将其删除。我以为这个答案是不正确的,直到我意识到这一点。谢谢。另外,相关评论在这里:https://github.com/facebook/jest/issues/2441#issuecomment-286248619 (3认同)
  • 这个答案对于 Jest 27 来说是不正确的。“verbose”与测试如何输出通过/失败结果有关。`silent` 用于抑制控制台输出。https://jestjs.io/docs/cli#--silent (2认同)

Erk*_*nen 33

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

在测试函数内运行console.debug('Message here', yourValueHere),运行测试脚本时它应该显示在控制台输出中。您可以使用标准输出中的MessageCtrl+F来验证它是否有效。

这确实可以在控制台中显示输出,但它并不是如何使用的答案console.log我所理解的如何使用的答案。

我正在运行@testing-library/jest-domjest-junit 12.0.0作为 devDependency。 jest-junit最低配置为

  "jest-junit": {
    "usePathForSuiteName": "true"
  },
Run Code Online (Sandbox Code Playgroud)

package.json。这主要是配置覆盖率报告。jest 的配置如下:

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


Dav*_*han 24

尝试同时使用这两个选项: - watch --verbose false

  • 没有人认为要获得更多输出,你必须将“verbose”模式设置为“false”,这很奇怪吗? (83认同)
  • 这个答案对于 Jest 27 来说是不正确的。“verbose”与测试如何输出通过/失败结果有关。`silent` 用于抑制控制台输出。https://jestjs.io/docs/cli#--silent (11认同)
  • 请注意,选项的顺序很重要。例如,如果使用-t,则需要在-t之前加上--verbose false:`jest --verbose false -t my-test` (5认同)
  • 这个(`--verbose false`)对我不起作用,我仍然看不到 console.log 语句输出 (3认同)

Isa*_*aac 21

日志记录未打印的潜在原因之一是console.log被嘲笑。如下所示

// jest-setup.js
global.console = {
  // eslint-disable-next-line no-undef
  log: jest.fn(), // console.log are ignored in tests
  // log: console.log,

  // Keep native behaviour for other methods, use those to print out things in your own tests, not `console.log`
  error: console.error,
  warn: console.warn,
  info: console.info,
  debug: console.debug,
};
Run Code Online (Sandbox Code Playgroud)
// package.json
  "jest": {
    "preset": "react-native",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js",
      "jsx",
      "json",
      "node"
    ],
    "setupFilesAfterEnv": [
      "@testing-library/jest-native/extend-expect",
      "<rootDir>/src/config/jest-setup.js"
    ],
    "testMatch": [
      "<rootDir>/src/**/__tests__/**/*.test.{ts,tsx}"
    ]
  },
Run Code Online (Sandbox Code Playgroud)

如果您希望禁用此console.log功能,则通常会使用此选项jest


Amb*_*ier 17

如果将 Webstorm 与 Jest 配置一起使用,请单击文件名而不是测试名称。

Webstorm 笑话面板


小智 13

在之前的回复中尝试了一些配置选项后,使用 console.debug() 而不是 console.log() 有效。


Rad*_*adu 12

检查您的命令行标志package.json以查看您没有--silent在那里。


Lir*_*mer 10

除了--verbose可能导致这种情况的选项之外,请注意,这--watch 也可能导致此错误.


Joa*_*oan 9

这对我有用:jest --verbose true


jco*_*lum 8

根据 v27 文档, silent这就是您想要的。verbose false(默认)阻止 Jest 输出层次结构中每个测试的结果,而 silent true(默认)将:

防止测试通过控制台打印消息。

npx jest --silent false如果您想使用 CLI 中的该选项运行 Jest,请使用。刚刚对此进行了测试console.log,它按预期工作。


cap*_*ian 7

就我而言,问题是由 [only] 标志引起的: it.only()test.only('some text',()=>{})

  • 您能提供更多信息吗?标志应用在哪里? (2认同)
  • @Alireza 并不是一个真正的标志,但是当你执行这个 `test.only( ... )` 时。删除唯一的功能。请参阅[文档](https://jestjs.io/docs/api) (2认同)

Tom*_*son 6

另外,请确保您的笑话配置没有silent: true。就我而言,我没有意识到其他人已将其添加到我们的配置中。

我在配置选项列表中没有看到它,但是这里记录了命令行标志


Joe*_*wen 5

尝试了有关笑话配置设置的建议,但无济于事。相反,就我而言,问题似乎与不等待异步代码有关:

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

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

相反,等待承诺确实会输出异步日志:

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

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

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