我在我的 React 应用程序中安装了名为 sinon js 的软件包,我的版本 5.0.10 已弃用。
所以我决定将其升级到最新版本18.0.0
这个包在我的测试文件中使用,通过导入它并从中创建假服务器等等。
在旧版本上,我拥有的所有测试用例都运行得很好。
当升级此包的版本并再次运行测试用例时,它不断向我显示有关在添加到此包的新文件中导出默认语法的错误。 这是 jest 提供的错误
所以 jest 不再能够理解这个文件,因为它不是用 commonJs 语法编写的。
我搜索并尝试了多种解决方案,但没有一个有效, 我只是想强制 jest 转换 Node_modules 中的任何新文件 这不是用 CommonJs 语法编写的。
以下是有关我当前的 jest 和 babel 设置的附加信息。
出现错误的node_modules内的文件路径: node_modules/sinon/pkg/sinon-esm.js
jest:这些是当前的变换和transformIgnorePatterns值。
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
],
bablerc 文件:这些是我当前的 babel 配置。
{
"env": {
"test": {
"presets": ["@babel/preset-react", "@babel/preset-env"]
},
"icons": {
"presets": ["@babel/preset-react", "@babel/preset-env"]
}
},
"presets": [
"@babel/preset-env",
"@babel/preset-react"
],
"plugins": [
"lodash",
[
"@babel/plugin-transform-runtime",
{
"helpers": false,
"regenerator": true
}
],
["@babel/plugin-transform-optional-chaining"]
]
}
这是我的 webpack 配置中 js 和 jsx 文件的规则:
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react', 'stage-0'],
plugins: ['transform-object-rest-spread', 'lodash'],
},
},
据我所知,您更新了
SinonJS
包(13 版本),它不再支持旧语法。我会:
v5
中有效的内容适用于 v18
是不现实的。package.json
文件以允许较旧的Javascript语法。使用 ES Modules
package.json
{
"type": "commonjs"
}
应该指出的是,CommonJS 目前被认为是遗留的,但并未完全弃用。