无法让 ava transpile 处理相对导入的文件
Cannot get ava transpile to work with relatively-imported files
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')
}
})
})
不要认为 import
在 nodejs 中受支持。你必须使用 require
.
const mongoose = require('mongoose');
对我有用的答案是 Serge Seletskyy 提出的以下建议。 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
现在应该可以工作了
非测试文件通过 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 版本。
我的 Ava 版本是 1.0.0-beta.4
,下面是对我有用的解决方案:
将以下内容添加到您的 package.json
"ava": {
"require": [
"@babel/register"
]
}
然后npm install --save-dev @babel/register
,运行再次测试
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')
}
})
})
不要认为 import
在 nodejs 中受支持。你必须使用 require
.
const mongoose = require('mongoose');
对我有用的答案是 Serge Seletskyy 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
现在应该可以工作了
非测试文件通过 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 版本。
我的 Ava 版本是 1.0.0-beta.4
,下面是对我有用的解决方案:
将以下内容添加到您的 package.json
"ava": {
"require": [
"@babel/register"
]
}
然后npm install --save-dev @babel/register
,运行再次测试