ava: SyntaxError: Unexpected token import

ava: SyntaxError: Unexpected token import

所以ava自带了build-in ES2015 support,对我的实际测试文件来说效果很好。但是,当我这样做时

import {newUser, createUser, login} from './helpers/user';

我无法在辅助文件中使用 import 和导出,然后我得到:

Users/rowe/Code/fv/foxvision-api/test/api/helpers/user.js:1
(function (exports, require, module, __filename, __dirname) { import request from 'supertest';

SyntaxError: Unexpected token import

我没有为开箱即用的测试文件设置特定的 babel 配置。谁能向我解释为什么不使用 babel 转译辅助依赖项?使用 test/**/helpers 甚至遵循 ava convention.

谢谢, 罗宾

解决方案

所以根据 thangngoc89 的解决方案,我所做的是:

  1. 添加 .babelrc 内容:
{
  "presets": [
    "es2015",
    "stage-2"
  ],
  "plugins": [
    "espower",
    "transform-runtime"
  ]
}
  1. 添加到 package.json:
"ava": {
  "require": ["babel-register"],
  "babel": "inherit"
}

AVA 只转译测试文件。不测试依赖关系,所以你需要在你的项目中设置 babel(我想你这样做是因为你正在使用 ES6)。

然后在 AVA 的设置中添加:

"ava": {
  ...
  "babel": "inherit"
}

这意味着使用您的项目 babel 设置来转译测试依赖项。在 AVA 文档中查看更多信息:https://github.com/sindresorhus/ava/blob/master/docs/recipes/babelrc.md

使用 rweng,我的解决方案更简单一些。

  1. .babelrc
{
  "presets": [
    "es2015"
  ],
  "plugins": [
    "transform-runtime"
  ]
}
  1. package.json:
"ava": {
  "require": ["babel-register"],
  "babel": "inherit"
}

不幸的是,标准解决方案不适用于我的情况。 这是我的解决方案,适用于 ava + quasar + vue 项目

.babelrc

{
  "presets": [
    "es2017",
    "@ava/stage-4",
    "stage-3"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

package.json

"ava": {
  "require": [
    "babel-register"
  ],
  "babel": "inherit"
},
"scripts": {
  "ava": "NODE_ENV=test ava",
  "test": "ava",
  "test:watch": "ava --watch --verbose"
}

安装模块

yarn add babel-register babel-preset-es2017 @ava/babel-preset-stage-4 babel-plugin-transform-runtime babel-preset-stage-3 --dev