Console.log 语句在 Jest 中不输出任何内容
Posted
技术标签:
【中文标题】Console.log 语句在 Jest 中不输出任何内容【英文标题】:Console.log statements output nothing at all in Jest 【发布时间】:2018-07-19 15:02:45 【问题描述】:console.log
语句在 Jest 中不输出任何内容。昨天这对我有用,但突然之间,它今天不起作用。我对我的配置进行了零更改,并且没有安装任何更新。
我没有使用--forceExit
选项。仍然看到这个问题。
【问题讨论】:
【参考方案1】:如果您还想查看文件并查看输出,您可以像 --watch --verbose false
这样一起运行这两个选项。
只运行一次--verbose false
【讨论】:
请注意,选项的顺序很重要。例如,如果使用 -t,则需要在 -t 之前加上 --verbose false:jest --verbose false -t my-test
这个答案对于 Jest 27 是不正确的。verbose
与测试输出通过/失败结果的方式有关。 silent
用于抑制控制台输出。 jestjs.io/docs/cli#--silent
这个 (--verbose false
) 对我不起作用,我仍然看不到 console.log 语句输出【参考方案2】:
Jest 默认禁止控制台日志消息。为了显示控制台日志消息,请在命令行中将静默选项设置为 false
在命令行中设置--silent=false
:
npm run test -- --silent=false
【讨论】:
【参考方案3】:根据https://github.com/facebook/jest/issues/2441的评论,
尝试在 package.json 的 jest 选项中设置 verbose: false (或删除它)。
【讨论】:
只是补充一点,如果你的命令行标志中有--verbose
,你也需要删除它。我认为这个答案是不正确的,直到我意识到这一点。谢谢。另外,相关评论在这里:github.com/facebook/jest/issues/2441#issuecomment-286248619
删除"verbose": true
并没有为我解决问题,我不得不将其更改为 false "verbose": false
,这似乎已经修复了它。谢谢!
在我的情况下,package.json 文件中有一个 --silent
标志,必须删除它才能看到 console.log 消息
这个答案对于 Jest 27 是不正确的。verbose
与测试输出通过/失败结果的方式有关。 silent
用于抑制控制台输出。 jestjs.io/docs/cli#--silent【参考方案4】:
检查package.json
中的命令行标志,看看那里没有--silent
。
【讨论】:
【参考方案5】:除了--verbose
选项会导致上述问题之外,请注意--watch
也可能导致此错误。
【讨论】:
【参考方案6】:还要确保您的 jest 配置没有 silent: true
。就我而言,我没有意识到其他人已将其添加到我们的配置中。
我在list of config options 中没有看到它,但在the command line flag is documented here 中看到。
【讨论】:
【参考方案7】:日志不打印的潜在原因之一是 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
,这通常使用
【讨论】:
我在一些项目中见过global.console = log: process.env['JEST_VERBOSE'] ? console.log : jest.fn(), ;
。我认为这是控制控制台输出的更好方法。
@liki:我认为这是一个非常好的主意!【参考方案8】:
尝试改用console.debug()
。
在测试函数中运行console.debug('Message here', yourValueHere)
,它应该在运行测试脚本时显示在控制台输出中。您可以使用 Ctrl+F
验证它是否有效,并在标准输出中找到 Message here。
这可以在控制台中显示输出,虽然它不是关于如何使用console.log
我理解的答案。
我正在运行 @testing-library/jest-dom
和 jest-junit 12.0.0
作为 devDependencies。
jest-junit
的最低配置为
"jest-junit":
"usePathForSuiteName": "true"
,
在package.json
。这主要是为了配置覆盖率报告。
jest 是这样配置的:
"jest":
"testMatch": [
"**/__tests__/**/*.[jt]s?(x)",
"**/?(*.)+(spec|test).[jt]s?(x)",
"!**/utilities.ts",
],
【讨论】:
【参考方案9】:在我的情况下,问题是由 [only] 标志引起的:
it.only()
或 test.only('some text',()=>)
【讨论】:
您能提供更多信息吗?标志在哪里应用? @Alireza 不是真正的标志,但当你这样做时test.only( ... )
。删除唯一的功能。见docs
@Alireza 抱歉,忽略了你的问题
@IsaacPak 感谢您的澄清【参考方案10】:
According to the v27 docs silent
是你想要的。 verbose false
(默认)阻止 Jest 输出层次结构中每个测试的结果,而silent true
(默认)将:
防止测试通过控制台打印消息。
如果您想从 CLI 使用该选项运行 Jest,请使用 npx jest --silent false
。刚刚使用console.log
进行了测试,它按预期工作。
【讨论】:
【参考方案11】:尝试了有关 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)
)
)
相反,等待承诺确实会输出异步日志:
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
【讨论】:
【参考方案12】:这是一个相当古老的问题,但仍然没有公认的答案。但是,没有一个建议的解决方案对我有用(诸如 --silent --verbose 等设置)。主要问题是 Jest 更改了全局 console
对象。因此,最简单的解决方案是不使用全局 console
对象。
而是从控制台模块导入专用日志功能并使用这些功能:
import error from "console";
error("This is an error");
就这么简单。
【讨论】:
【参考方案13】:尝试使用console.info(),它是console.log() 的别名。我尝试了几乎所有上述答案,但仍然 console.log() 无论如何都没有为我工作。因此,使用了完成工作的 console.info()。
【讨论】:
【参考方案14】:在我的情况下,问题是在需要模块时生成的日志,所以在实际测试用例开始之前。从***import
更改为在测试用例中使用require
解决了问题。
【讨论】:
【参考方案15】:将我的文件从 index.spec.js
重命名为 index.test.js
对我有用。
【讨论】:
以上是关于Console.log 语句在 Jest 中不输出任何内容的主要内容,如果未能解决你的问题,请参考以下文章