如果我使用ES6中的import/export
,那么我的所有Jest测试都会失败,并出现错误:
意外保留字
我将测试对象转换为使用老式IIFE语法,突然我的测试通过了。或者,以更简单的测试用例为例:
var Validation = require('../src/components/validation/validation'); // PASS
//import * as Validation from '../src/components/validation/validation' // FAIL
同样的错误。显然这里的导入/导出有问题。对我来说,仅仅为了让我的测试框架开心而使用ES5语法重写代码是不现实的。
我有巴别塔笑话。我尝试了GitHub问题的各种建议。这是不可能的。
"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"]
}
有解决办法吗?
对于更新的配置,我使用https://babeljs.io/setup#installation
选择玩笑和快乐:
作为参考,当前配置:
npm install --save-dev babel-jest
在package.json文件中,进行以下更改:
{
"scripts": {
"test": "jest"
},
"jest": {
"transform": {
"^.+\\.jsx?$": "babel-jest"
}
}
}
安装巴别塔预设:
npm install @babel/preset-env --save-dev
创建一个. babelrc
文件:
{
"presets": ["@babel/preset-env"]
}
运行测试:
npm run test
根据这个问题,有来自jest@25.4.0
。这样你就不用再使用巴贝尔了。在撰写此答案(2020年5月)时,要激活此功能,您需要做三件简单的事情:
转换:{}
,确保您不会转换掉
导入
语句
节点@^12.16.0||
因此,您的Jest配置文件至少应该包含以下内容:
export default {
testEnvironment: 'jest-environment-node',
transform: {}
...
};
要设置<代码>--实验性vm模块
标志,您必须运行Jest,如下所示:
node --experimental-vm-modules node_modules/jest/bin/jest.js
还要注意,在Github问题中,这种方法还不支持jest
对象。因此,您可能需要手动导入它:
import {jest} from '@jest/globals'
(我希望这将在未来发生变化)
从我对另一个问题的回答来看,这可以更简单:
唯一的要求是将测试
环境配置到Babel,并添加ECMAScript
步骤1:
将您的
test
环境添加到项目根目录中的. babelrc
:
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-modules-commonjs"]
}
}
}
第二步:
安装ECMAScript
npm install --save-dev @babel/plugin-transform-modules-commonjs
就这样。Jest将自动启用从ECMAScript模块到CommonJS的编译,而不必通知
package.json中的
Jest
属性的其他选项。
问题内容: 我一直在整个互联网上寻找答案,但没有明确的答案。 当前,NodeJS仅使用CommonJS语法加载模块,如果您确实要使用标准的ES2015模块语法,则必须事先对其进行转换,或者在运行时使用外部模块加载器。 目前,我不太愿意使用这两种方法,NodeJS维护人员是否计划支持ES2015模块?我完全没有发现任何提示。 目前,NodeJS 6.x声称支持96%的ES2015功能,但没有任何模块
我在网上到处找都找不到一个明确的答案。 当前Node.js仅使用CommonJS语法来加载模块,如果您真的想使用标准的ECMAScript 2015模块语法,那么您要么必须事先传输它,要么在运行时使用外部模块加载器。 目前,我不太愿意使用这两种方法中的任何一种,Node.js的维护人员是否计划支持ECMAScript2015模块?关于这一点,我根本没有找到任何提示。 目前,Node.js6.x声称
问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知
我正在尝试用我的网页包项目设置Jest。当我运行测试时,Jest抱怨它无法读取es6代码。巴贝尔似乎没有转换我的测试文件。 我尝试过在互联网上找到的各种解决方案,但我仍然感到困惑。也许有人有更多的巴别塔/网页包知识,可以看看我的配置,帮助我。 相关package.json脚本: 有关package.json: 配置/webpack.config.js: config/jest.config.js
问题内容: 我目前正在玩React Native。我正在尝试构建我的应用程序,但是它开始变得杂乱无章。 现在,在我的能力范围内,我可以轻松做到: 但是,当我开始创建更多具有更深目录结构的组件时,它开始变得混乱: 我知道首选的解决方案是为事情创建私有npm模块,但这对于一个小型项目来说是过大的。 您可以在浏览器上执行类型解决方案,但是如何通过导入实现呢? 问题答案: React也有同样的问题。因此,
是否有人使用es2015语法编写jasmine/jest测试?需要多少填隙/填充胶/选区划分? 我无法正确导入函数。我有一个模块:../utils/TweetUtils.js 和一个测试套件: ../../\uuuuu测试\uuuu/TweetUtils-test.js 如果我用这样的东西将控制台输出破解到套件中: