Log 语句在 Jest 中根本不输出任何内容

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

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

262435 次浏览

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

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

除了前面提到的--verbose选项可能导致此错误外,还要注意--watch选项也可能导致此错误。

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

对于一次运行,只需执行--verbose false

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

还要确保你的笑话配置没有silent: true。就我而言,我没有意识到其他人已经将其添加到我们的配置中。

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

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

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

npm run test -- --silent=false

检查你在package.json中的命令行标志,看看你在那里没有--silent

在我的情况下,这个问题是由[only]标志在: it.only()test.only('some text',()=>{})

将我的文件从index.spec.js重命名为index.test.js对我来说很有用。

尝试了关于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 < / p >

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

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

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

我运行@testing-library/jest-domjest-junit 12.0.0作为devDependencies。 jest-junit的最小配置为

  "jest-junit": {
"usePathForSuiteName": "true"
},
package.json < p >。这主要用于配置覆盖率报告。 Jest的配置如下:

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

记录不打印的一个潜在原因是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,
};
// 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}"
]
},

如果你想在jest中禁用console.log,这通常被使用

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

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

如果你想在CLI中使用该选项运行Jest,请使用npx jest --silent false。刚才用console.log测试了这个,它如预期的那样工作。

尝试使用console.info(),它是console.log()的别名。我尝试了上面几乎所有的答案,但console.log()仍然不适合我。因此,使用console.info()来完成这项工作。

这是一个相当古老的问题,至今仍没有公认的答案。然而,没有一个建议的解决方案对我有效(设置像-静音-verbose等)。主要问题是Jest改变了全局console对象。因此,最简单的解决方案是不使用全局console对象。

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

import { error } from "console";


error("This is an error");

就这么简单。

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

如果使用带有Jest配置的Webstorm,请单击文件名而不是测试名称。

Webstorm笑话面板

在我的例子中,问题是从编译版本(存在于dist文件夹中)而不是src文件夹中导入函数。因此它使用的是旧版本。所以重建项目和/或从src导入修复了我的问题。

在MacOS的jest版本26.6.3上,我必须附加--silent="false"