【问题标题】:Cannot get ava transpile to work with relatively-imported files无法让 ava 转译以处理相对导入的文件
【发布时间】:2018-04-12 15:19:38
【问题描述】:

ES6 导入在此文件中有效,但在我导入相关文件(例如 Mongoose 用户模型)时会生成意外令牌 import 错误。

import mongoose from 'mongoose';
^^^^^^

SyntaxError: Unexpected token import

.babelrc

{
  "presets": [
    ["es2015", { "modules": false }]
  ],
  "plugins": [
    "transform-object-rest-spread",
    "transform-async-to-generator",
    "transform-export-extensions"
  ]
}

package.json

 "ava": {
    "require": [
      "babel-register"
    ]
  }

users.test.js

import test from 'ava'
import axios from 'axios'

import User from '../../models/user'
import { USER_REGISTRATION_ROUTES } from '../helpers/_test.properties.js'

test('user registration api works', async function (t) {
  const email = `test${Date.now()}@example.com`

  const userRegistrationData = {
    email,
    first_name: "john",
    last_name: "doe",
    password: "password"
  }

  await axios.post(USER_REGISTRATION_ROUTES, userRegistrationData)
    .then(response => {
      const data = response.data.data
      const user = data.user
      t.deepEqual(response.status, 200, 'Verify: response is successful')
      t.deepEqual(data.registered, true, 'Verify: user is registered')
      t.truthy(Object.keys(user).length > 0,
        'Verify: if registered, user object is returned')
      t.truthy(user.authentication_token,
        'Verify: token is generated on successful registration')
    })
    .catch((err) => {
      t.fail(`Cannot make requst to register user ${err}`)
    })

  User.remove({ email }, function (err) {
    if (err) {
      console.log('error')
    } else {
      console.log('success deleting test user')
    }
  })
})

【问题讨论】:

    标签: node.js testing babeljs ava


    【解决方案1】:

    不要认为 nodejs 还支持import。你必须使用require。

    const mongoose = require('mongoose');
    

    【讨论】:

    • 这就是我的.babelrc 文件的用途?它在 webpack 构建过程中使用(有效):/ 并且 import 在测试文件本身中有效。
    【解决方案2】:

    对我有用的答案是Serge Seletskyyhere 提出的以下建议。 ES2017 功能(例如异步等待)需要 es2017 预设。

    .babelrc

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

    package.json

    "ava": {
      "require": [
        "babel-register"
      ],
      "babel": "inherit"
    }
    

    安装模块

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

    运行 ./node_modules/.bin/ava --verbose 现在应该可以工作了

    【讨论】:

      【解决方案3】:

      非测试文件通过babel-register 加载,它应用您的.babelrc。但是,您已禁用模块转译。我在另一条评论中看到您正在使用 Webpack。尝试为 Babel 添加环境配置以恢复模块转换。从我的头顶:

      {
        "presets": [
          ["es2015", { "modules": false }]
        ],
        "plugins": [
          "transform-object-rest-spread",
          "transform-async-to-generator",
          "transform-export-extensions"
        ],
        "env": {
          "test": {
            "presets": [
              ["es2015", { "modules": true }]
            ]
          }
        }
      }
      

      这应该适用于最新的 AVA 版本。

      【讨论】:

        【解决方案4】:

        我的 Ava 版本是 1.0.0-beta.4,下面是对我有用的解决方案:

        将以下内容添加到您的 package.json

        "ava": {
          "require": [
            "@babel/register"
          ]
        }
        

        然后npm install --save-dev @babel/register,再次运行测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多