node.js - 如何在 Jest 中使用 babel-preset-env

标签 node.js jestjs babeljs babel-node

我们正在更新我们的 API,来自 Babel 的 Henry Zhu 提醒我这个名为 babel-preset-env 的预设。取代对 babel-preset-es2015 的需求和 babel-preset-es2018 .

现在,我很难理解处理所有事情的最简单方法。

  • 我们的 API 使用 Node v8.x 和异步/等待、原生 promise
  • 我要点差运算符(operator)
  • 我想要管道运算符(operator)
  • 我想要导入/导出语法
  • 我想支持 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文件不是最佳的

最佳答案

如果你想使用babel-preset-env作为 babel-preset-es2015 的替代品(已弃用)Jest,那么您必须确保“env”配置中的“modules”属性设置为“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:意外的 token 导入”。

为了完整起见,这里有一个简单的测试:

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",

关于node.js - 如何在 Jest 中使用 babel-preset-env,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259679/

相关文章:

node.js - 使用 Node.js 或 Ringojs 对实时网站安全吗?

javascript - 使用 Jest 触发方法后检查 Vue 组件数据

Vue.js 用 Jest 进行测试,类绑定(bind)失败

node.js - Node 在异步函数完成之前退出

reactjs - 使用 Jest 测试 React 应用程序 : Unexpected token

reactjs - 尝试从 Babel 6 升级到 Babel 7 时 webpack 模块构建失败

javascript - 如果应用程序已经在监听,如何添加快速路线?

javascript - 当我已经安装了 lodash 时,我还需要 n_ 吗?

node.js - 显示存储为缓冲区的 MongoDB 图像

typescript - Jest : node_module dependency uses import statement and crashes the test