开玩笑:测试套件无法运行,SyntaxError: Unexpected token import

新手上路,请多包涵

这是我在 package.json 文件中的 笑话配置

 "jest": {
    "automock": false,
    "browser": true,
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "./app/tests/mocks/FileMock.js",
      "\\.(css|less)$": "identity-obj-proxy"
    },
    "moduleFileExtensions": [
      "js",
      "jsx"
    ],
    "moduleDirectories": [
      "node_modules"
    ],
    "transform": {
      "^.+\\.jsx?$": "./node_modules/babel-jest",
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "./app/tests/mocks/FileTransformer.js"
    },
    "testEnvironment": "jsdom",
    "testPathDirs": [
      "./app/tests"
    ],
    "testRegex": ".*.test.js",
    "verbose": true
  }

.babelrc 文件位于我的根文件夹中:

 {
  "plugins": ["syntax-dynamic-import", "transform-runtime"],
  "presets": [
    [
      "es2015",
      {
        "modules": false
      }
    ],
    "react",
    "stage-0"
  ],
  "env": {
    "start": {
      "presets": [
        "react-hmre"
      ]
    }
  }
}

根据在开玩笑 的入门页面上 找到的文档,这是我需要 babel 工作的一切,这很神奇。

无论如何,这个测试:

 import React from 'react';
import {shallow} from 'enzyme';
import Landing from '../components/Landing.component';

describe('<Landing/>', () => {
  it('should render a header to the page', () => {
    const landing = shallow(<Landing/>);
    expect(landing.find('h1').text()).toBe('This is the Landing component');
  });
});

返回:

 FAIL  app/tests/Landing.component.test.js
 ● Test suite failed to run

   /Users/shooshte/PersonalProjects/surviveJS/app/tests/Landing.component.test.js:1
   ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import React from 'react';
                                                                                            ^^^^^^
   SyntaxError: Unexpected token import

     at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)

我究竟做错了什么?

原文由 Miha Šušteršič 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 556
2 个回答

Jest 将 env 变量设置为测试,所以我必须将我的预设添加到 .babelrc 中的 env 设置中:

 {
  "plugins": ["syntax-dynamic-import", "transform-runtime"],
  "presets": [
    [
      "es2015",
      {
        "modules": false
      }
    ],
    "react",
    "stage-0"
  ],
  "env": {
    "start": {
      "presets": [
        "react-hmre"
      ]
    },
    "test": {
      "presets": ["es2015", "react", "stage-0"]
    }
  }
}

原文由 Miha Šušteršič 发布,翻译遵循 CC BY-SA 3.0 许可协议

每个年度预设仅编译当年批准的内容。 babel-preset-env replaces es2015 , es2016 , es2017 , latest

基于此,在最新配置上,您必须使用/替换您的插件/预设 es2015 和任何 esX 到新的: env

  1. 您必须安装 babel-preset-envnpm install
  2. 在你的 .babelrc 你应该相应地更新:
 {
  "presets": [
    "env",
    "stage-0",
    "react-native"
  ],
  "plugins": ...
}

有关 Babel 插件官方文档 的更多信息。

☝️ 记住数组中插件/预设的顺序很重要。

原文由 Fernando Cea 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进