在 "if (error?.stack)" 中设置Jest快照时出现错误。

13

我要创建快照测试,但一开始就遇到了问题。

运行测试时,我遇到了以下错误:

    /Users/illia/WebstormProjects/TESTS/node_modules/jest/node_modules/jest-cli/build/cli/index.js:161
    if (error?.stack) {
              ^
SyntaxError: Unexpected token '.'

在测试文件中我没有错误

import renderer from 'react-test-renderer';

import PaymentDisclaimer from './PaymentDisclaimer';

    it('renders correctly when all default props', () => {
        const tree = renderer.create(<PaymentDisclaimer fullPrice={9} />).toJSON();
        expect(tree).toMatchSnapshot();
    });

软件包:

"react-test-renderer": "^18.2.0",
"jest": "^29.0.3",
"ts-jest": "^29.0.1", (was installed as possible solution)

13
Jest 29 要求使用 Node 14+ 版本:https://jestjs.io/blog/2022/08/25/jest-29,https://node.green/#ES2020-features-optional-chaining-operator-----。 - jonrsharpe
您还可以查看 Jest 的拉取请求 "chore: drop node 12 and 17",其中移除了支持。请参见 https://github.com/jestjs/jest/pull/13033 - J-Christophe
2个回答

18
这种情况发生在 jest 运行在不读取 JS 新更新的 node 版本下。你需要在 node 14 或更高版本中运行它。
具体来说,if (error?.stack) 中的 ?. 是一个 可选链操作符,只在 14 或更高版本中 支持
你可以使用 nvm 切换 Node 版本:
$ nvm use 14 
Now using node v14.18.0 (npm v6.14.15)

检查Node Version Manager (nvm)

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Albert Logic Einstein
我遇到了相同的错误,并且正在运行在Ubuntu 22.04上使用apt安装的旧版本NodeJS。卸载旧版本并安装最新支持的版本之一,如主要的NodeJS网站所述,解决了这个问题。 - vinaut

0

我不知道为什么,但在我的情况下,我使用了nvm,并逐个尝试了不同的版本,最终在node v14.12.0上,错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接