该应用程序是由React与ES6编写的,因此在应用程序内部使用了import
和export
语句。因此,Jest配置为与ES6兼容,但是编译后的node_modules依赖项导致在测试开始时出现TypeError: require(...) is not a function
的错误。我认为发生这种情况是因为jest被配置为与babel-jest一起使用来处理import
语句,但是编译后的代码正在使用require
来处理模块。我尝试排除 node_modules 文件夹,但未做任何更改。我认为,ES6模块使用编译模块作为依赖项放置到node_modules中,因为它不能被排除?有可能吗?
此外,我在理解笑话如何同时处理import
和require
时遇到问题?如果首先编译ES6代码,则在该编译过程之后,每个模块将作为require
处理。那是什么问题呢?
这是配置
jest.config.js
module.exports = {
clearMocks: true,
moduleNameMapper: {
"^.+\\.(js|jsx)$": "babel-jest",
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
"<rootDir>/mocks/fileMock.js",
"\\.(css|scss|sass|less)$":
"<rootDir>/mocks/styleMock.js"
},
modulePathIgnorePatterns: [
"node_modules/"
]
};
babel.config.js
/* eslint-disable */
module.exports = {
presets: [
"@babel/preset-react",
[
"@babel/preset-env",
{
targets: {
browsers: ["ie >= 9", "safari >= 8"]
}
}
]
],
plugins: [
["@babel/plugin-proposal-decorators", { legacy: true }],
[
"@babel/plugin-proposal-class-properties",
{ loose: true }
],
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-object-assign",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-runtime"
],
env:{
test:{
plugins: [
["@babel/plugin-proposal-decorators", { legacy: true }],
[
"@babel/plugin-proposal-class-properties",
{ loose: true }
],
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-object-assign",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-runtime"
]
}
}
};