如果我使用ES6中的import/export
,那么我的所有测试都会失败并显示错误:
意外的保留字
我将我的测试对象转换为使用旧式IIFY语法,突然我的测试通过了。或者,采用更简单的测试用例:
var Validation = require('../src/components/validation/validation');//PASS
//import * as Validation from '../src/components/validation/validation'//FAIL
同样的错误。显然这里的导入/导出存在问题。使用ES5语法重写我的代码只是为了让我的测试框架感到高兴,这对我来说是不切实际的。
我有巴贝尔开玩笑。我从github问题尝试了各种suggestions。不行。到目前为止。
"scripts": {
"start": "webpack-dev-server",
"test": "jest"
},
"jest": {
"testPathDirs": [
"__tests__"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testFileExtensions": ["es6", "js"],
"moduleFileExtensions": ["js", "json", "es6"]
},
{
"presets": ["es2015", "react"],
"plugins": ["transform-decorators-legacy"]
}
这是否有解决方法?
答案 0 :(得分:33)
根据this issue,jest@25.4.0
对ESM有原生支持。因此,您不再需要使用babel。在撰写此答案(05/2020)时,要激活该功能,您需要做三件事:
import
,确保您不会变换transform: {}
语句node@^12.16.0 || >=13.2.0
标志运行--experimental-vm-modules
jest-environment-node
或jest-environment-jsdom-sixteen
运行测试。因此您的Jest配置文件应至少包含以下内容:
export default {
testEnvironment: 'jest-environment-node',
transform: {}
...
};
要设置--experimental-vm-modules
标志,您将必须按以下方式运行Jest:
node --experimental-vm-modules node_modules/jest/bin/jest.js
还请注意Github问题,该方法尚不支持jest
对象。因此,您可能需要手动导入它:
import {jest} from '@jest/globals'
(我希望以后会改变)
答案 1 :(得分:12)
从my answer到另一个问题,这可能更简单:
唯一的要求是将您的test
环境配置为Babel,并添加es2015转换插件:
第1步:
将您的test
环境添加到项目根目录中的.babelrc
:
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
第2步:
安装es2015转换插件:
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs
就是这样。 Jest将自动启用从ES模块到CommonJS的编译,而无需向jest
中的package.json
属性通知其他选项。
答案 2 :(得分:4)
这是在你的.babelrc文件中添加stage-0的问题。这是一个例子:
{
"presets": ["es2015", "react", "stage-0"],
"plugins": ["transform-decorators-legacy"]
}
答案 3 :(得分:3)
对于更新的配置,我使用的是https://babeljs.io/setup#installation
选择JEST并开心:
作为参考,当前配置:
npm install --save-dev babel-jest
在您的 package.json 文件中,进行以下更改:
{
"scripts": {
"test": "jest"
},
"jest": {
"transform": {
"^.+\\.jsx?$": "babel-jest"
}
}
}
安装babel预设:
npm install @babel/preset-env --save-dev
创建一个.babelrc
文件:
{
"presets": ["@babel/preset-env"]
}
运行测试:
npm run test
答案 4 :(得分:1)
我遇到了同样的问题。
这些是我所做的yarn add --dev babel-jest @babel/core @babel/preset-env
在rootDir中制作jest.config.js
module.exports = {
moduleFileExtensions: ["js", "json", "jsx", "ts", "tsx", "json"],
transform: {
'^.+\\.(js|jsx)?$': 'babel-jest'
},
testEnvironment: 'node',
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1'
},
testMatch: [
'<rootDir>/**/*.test.(js|jsx|ts|tsx)', '<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))'
],
transformIgnorePatterns: ['<rootDir>/node_modules/']
};
然后在rootDir中创建babal.config.js。 像这样去
module.exports = {
"presets": ["@babel/preset-env"]
}
答案 5 :(得分:0)
除了安装babel-jest
(现在默认带有jest),请务必安装regenerator-runtime
。
答案 6 :(得分:0)
要添加对 React 和 react-testing-library 的支持,弹出 CreateReactApp 并从 package.json
获取所有需要的 Jest 配置可能会很有用。它已准备好与另一个捆绑器一起使用,在我的情况下是 Rollup。
答案 7 :(得分:0)
在package.json
中,请像这样设置:"test": "node --experimental-vm-modules node_modules/.bin/jest"
应该不错!
答案 8 :(得分:-3)
我用.default
解决了这个问题。
尝试
var Validation = require('../src/components/validation/validation').default;