我正在尝试使用jest来测试我的项目,但是即使运行测试文件非常简单,运行npm run test
时,我仍会得到ReferenceError: define is not defined
。
test("Adding 1 + 1 equals 2", () => {
expect(1 + 1).toBe(2);
});
这导致我认为我的设置配置错误,但是我认为我在配置中没有做任何可能导致此事情的事情(我认为)。
当我在测试用例中不直接使用define
时,为什么不告诉我define
感到困惑。任何指针,我将不胜感激!
谢谢!
编辑:这是我的package.json
"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx,mjs}"
],
"testMatch": [
"**/__tests__/**/*.js?(x)",
"**/?(*.)+(spec|test).js?(x)"
],
"testEnvironment": "node",
"testURL": "http://localhost",
"transform": {
"^.+\\.(js|jsx|mjs)$": "./node_modules/babel-jest",
"^.+\\.css$": "./config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "./config/jest/fileTransform.js"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
],
"moduleNameMapper": {
"^react-native$": "react-native-web"
},
"moduleFileExtensions": [
"web.js",
"js",
"json",
"web.jsx",
"jsx",
"node",
"mjs"
]
}
编辑2:我发现即使测试文件中什么也没有,我仍然遇到相同的ReferenceError: define is not defined
错误
答案 0 :(得分:0)
问题出在我的.babelrc
中。更改为:
{
"env": {
"test": {
"plugins": []
},
"development": {
"plugins": [
"transform-es2015-modules-amd"
]
}
},
"presets": [
"react",
"es2015",
"stage-2"
],
"sourceMaps": false,
"ignore": [
"build",
"node_modules"
]
}
错误消失了:-)
答案 1 :(得分:0)
那是因为我们有@babel/plugin-transform-modules-amd
,以便在过程测试任务中,代码将转换为define()
AMD格式,这就是错误define
的出处。为玩笑测试指定babel配置可以解决此问题。
// babel.config.js
module.exports = api => {
const commonConfig = {/* preset configs or something */};
if( !api.env("test") ){
commonConfigs.plugins.push("@babel/plugin-transform-modules-amd");
}
return commonConfig;
}
Jest API Reference / Making your Babel config jest-aware
关于转换后的代码 该命令将向您显示测试代码的缓存目录,
npx jest --showConfig | grep cacheDirectory
# /private/var/folders/dc/7gkfb6ns0c79ll9gv2y3m6_w0010gn/T/jest_dx
打开该文件夹,您可能会在jest_dx/jest-transform-cache-{HASH}/{QueueNumber}
中看到一些文件,该文件就在其中。