如何在 Jest 中使用 babel-preset-env
How to use babel-preset-env with Jest
我们正在更新我们的 API,来自 Babel 的 Henry Zhu 提醒我这个名为 babel-preset-env
的预设来取代对 babel-preset-es2015
和 babel-preset-es2018
的需要.
现在,我很难理解处理所有事情的最简单方法。
- 我们的 API 使用节点 v8.x 和 async/await,原生 promises
- 我要传播运算符
- 我要管道操作员
- 我想要import/export语法
- 我要支持Jest
- 我喜欢 babel-node 将 API 转译到内存中的方式
如果我只显示我们配置的当前位置,这会更容易:
.babelrc
{
"presets": [
"env",
{
"targets": {
"node": "current"
}
},
"jest"
]
}
package.json
{
"scripts": {
"test": "node --harmony-async-await node_modules/jest/bin/jest.js",
"start:local": "NODE_ENV=localhost npm run babel-node -- warpcore/server.js",
"start": "npm run babel-node -- warpcore/server.js",
"babel-node": "babel-node --presets=es2015,stage-2"
},
"dependencies": {
"babel-polyfill": "^6.23.0"
},
"devDependencies": {
"babel-cli": "^6.24.1",
"babel-core": "^6.25.0",
"babel-eslint": "^7.2.3",
"babel-jest": "^20.0.3",
"babel-preset-env": "^1.6.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2018": "^1.0.0",
"babel-preset-stage-2": "^6.24.1",
"jest": "^20.0.4"
},
"jest": {
"testURL": "http://localhost:8080",
"testEnvironment": "node"
}
}
我不确定需要如何组织这些事情才能最好地实现我上面的项目符号列表。
What changes should I make?
- 我认为 babel-node 脚本需要更改
- 我想我可以删除其中的一些包
- 我怀疑
.babelrc
文件不是最优的
我想我成功了。这是解决方案:
.babelrc
题中发的那个有语法错误,因为env preset需要用括号括起来[](来自:http://babeljs.io/docs/plugins/preset-env/)
正确:
{
"presets": [
["env",
{
"targets": {
"node": "current"
}
}],
"jest"
]
}
package.json
问题中发布的内容有一些可以删除的内容:
{
"scripts": {
"test": "jest --verbose",
"start:local": "cross-env NODE_ENV=localhost babel-node -- app.js",
"babel-node": "babel-node --presets=env"
},
"dependencies": {
"babel-cli": "^6.24.1",
"babel-preset-env": "^1.6.0"
},
"devDependencies": {
"babel-eslint": "^7.2.3",
"babel-jest": "^20.0.3",
"jest": "^20.0.4"
},
"jest": {
"testURL": "http://localhost:8080",
"testEnvironment": "node"
}
}
我认为干净多了。如果您想明确包含或排除任何预设,或者指定要支持的浏览器,您可以从 .babelrc
文件中调整预设。
如果你想使用 babel-preset-env as a replacement for babel-preset-es2015 (which is deprecated) with Jest, then you have to make sure that the "modules" 属性 在你的 "env" 配置中设置为 "commonjs"。
这是一个示例配置:
.babelrc
{
"env": {
"test": {
"plugins": [
"transform-class-properties",
"transform-object-rest-spread"
],
"presets": [
"jest",
"react",
[
"env",
{
"debug": false,
"modules": "commonjs",
"targets": {
"node": "current"
},
"useBuiltIns": true
}
]
]
}
}
}
您可以在 env.test
中看到,预设 env
(即 "babel-preset-env" 配置)已将 "modules" 设置为 "commonjs"。这很重要,否则你会得到 "SyntaxError: Unexpected token import".
为了完整性,这里有一个简单的测试:
ExampleButton.test.jsx
import ExampleButton from './ExampleButton';
import React from 'react';
import renderer from 'react-test-renderer';
test('Example Test', () => {
const component = renderer.create(<ExampleButton />);
const json = component.toJSON();
expect(json.type).toBe('button');
});
ExampleButton.jsx
import React from 'react';
class ExampleButton extends React.Component {
render() {
return (
<button onClick={this.props.onClick}>
{this.props.text}
</button>
)
}
}
export default ExampleButton;
对于我的 Babel 设置,我使用了以下依赖项:
"babel-core": "6.26.0",
"babel-jest": "21.2.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-preset-env": "1.6.1",
"babel-preset-react": "6.24.1",
"jest": "21.2.1",
"react-test-renderer": "16.1.1",
这是我找到的解决方案:
{
"presets": ["@babel/env", "@babel/react"]
}
我们正在更新我们的 API,来自 Babel 的 Henry Zhu 提醒我这个名为 babel-preset-env
的预设来取代对 babel-preset-es2015
和 babel-preset-es2018
的需要.
现在,我很难理解处理所有事情的最简单方法。
- 我们的 API 使用节点 v8.x 和 async/await,原生 promises
- 我要传播运算符
- 我要管道操作员
- 我想要import/export语法
- 我要支持Jest
- 我喜欢 babel-node 将 API 转译到内存中的方式
如果我只显示我们配置的当前位置,这会更容易:
.babelrc
{
"presets": [
"env",
{
"targets": {
"node": "current"
}
},
"jest"
]
}
package.json
{
"scripts": {
"test": "node --harmony-async-await node_modules/jest/bin/jest.js",
"start:local": "NODE_ENV=localhost npm run babel-node -- warpcore/server.js",
"start": "npm run babel-node -- warpcore/server.js",
"babel-node": "babel-node --presets=es2015,stage-2"
},
"dependencies": {
"babel-polyfill": "^6.23.0"
},
"devDependencies": {
"babel-cli": "^6.24.1",
"babel-core": "^6.25.0",
"babel-eslint": "^7.2.3",
"babel-jest": "^20.0.3",
"babel-preset-env": "^1.6.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2018": "^1.0.0",
"babel-preset-stage-2": "^6.24.1",
"jest": "^20.0.4"
},
"jest": {
"testURL": "http://localhost:8080",
"testEnvironment": "node"
}
}
我不确定需要如何组织这些事情才能最好地实现我上面的项目符号列表。
What changes should I make?
- 我认为 babel-node 脚本需要更改
- 我想我可以删除其中的一些包
- 我怀疑
.babelrc
文件不是最优的
我想我成功了。这是解决方案:
.babelrc
题中发的那个有语法错误,因为env preset需要用括号括起来[](来自:http://babeljs.io/docs/plugins/preset-env/)
正确:
{
"presets": [
["env",
{
"targets": {
"node": "current"
}
}],
"jest"
]
}
package.json
问题中发布的内容有一些可以删除的内容:
{
"scripts": {
"test": "jest --verbose",
"start:local": "cross-env NODE_ENV=localhost babel-node -- app.js",
"babel-node": "babel-node --presets=env"
},
"dependencies": {
"babel-cli": "^6.24.1",
"babel-preset-env": "^1.6.0"
},
"devDependencies": {
"babel-eslint": "^7.2.3",
"babel-jest": "^20.0.3",
"jest": "^20.0.4"
},
"jest": {
"testURL": "http://localhost:8080",
"testEnvironment": "node"
}
}
我认为干净多了。如果您想明确包含或排除任何预设,或者指定要支持的浏览器,您可以从 .babelrc
文件中调整预设。
如果你想使用 babel-preset-env as a replacement for babel-preset-es2015 (which is deprecated) with Jest, then you have to make sure that the "modules" 属性 在你的 "env" 配置中设置为 "commonjs"。
这是一个示例配置:
.babelrc
{
"env": {
"test": {
"plugins": [
"transform-class-properties",
"transform-object-rest-spread"
],
"presets": [
"jest",
"react",
[
"env",
{
"debug": false,
"modules": "commonjs",
"targets": {
"node": "current"
},
"useBuiltIns": true
}
]
]
}
}
}
您可以在 env.test
中看到,预设 env
(即 "babel-preset-env" 配置)已将 "modules" 设置为 "commonjs"。这很重要,否则你会得到 "SyntaxError: Unexpected token import".
为了完整性,这里有一个简单的测试:
ExampleButton.test.jsx
import ExampleButton from './ExampleButton';
import React from 'react';
import renderer from 'react-test-renderer';
test('Example Test', () => {
const component = renderer.create(<ExampleButton />);
const json = component.toJSON();
expect(json.type).toBe('button');
});
ExampleButton.jsx
import React from 'react';
class ExampleButton extends React.Component {
render() {
return (
<button onClick={this.props.onClick}>
{this.props.text}
</button>
)
}
}
export default ExampleButton;
对于我的 Babel 设置,我使用了以下依赖项:
"babel-core": "6.26.0",
"babel-jest": "21.2.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-preset-env": "1.6.1",
"babel-preset-react": "6.24.1",
"jest": "21.2.1",
"react-test-renderer": "16.1.1",
这是我找到的解决方案:
{
"presets": ["@babel/env", "@babel/react"]
}