首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Jest测试ES6类时出现问题

使用Jest测试ES6类时出现问题
EN

Stack Overflow用户
提问于 2020-04-24 00:11:24
回答 2查看 703关注 0票数 1

我在使用jest对es6类进行单一测试时遇到了问题。我不知道配置是否正确,或者我是否需要一些额外的软件包。

这是我的文件queue.js

代码语言:javascript
运行
复制
export default class Queue {
    constructor() {
        ...
    }
    //Adds a new elemnt to the queue
    method1(element) {
        ...
    }
    .
    .
    .
}

这是我的测试文件

代码语言:javascript
运行
复制
import Queue from "../src/queue";

const myQueue = new Queue();

describe("Queue", () => {
    ...
    ...
    ...

});

这是我的.babelrc文件

代码语言:javascript
运行
复制
{
    "presets": ["es2015"]
}

这是我的package.json文件。清理、构建和生产脚本都可以正常运行,但当我尝试运行测试时,就抛出了一个错误。

代码语言:javascript
运行
复制
{
    "name": "queue",
    "version": "1.0.0",
    "description": "An implementation of a queue data structure",
    "main": "queue.js",
    "scripts": {
        "test": "jest",
        "clean": "rm -dr dist",
        "build": "npm run clean && mkdir dist && babel src -s -d dist",
        "production": "npm run build && node bin/production"
    },
    "author": "Osiris Román",
    "license": "ISC",
    "jest": {
        "transform": {
            "^.+\\.js$": "babel-jest"
        }
    },
    "devDependencies": {
        "babel-cli": "^6.26.0",
        "babel-jest": "^25.4.0",
        "babel-preset-es2015": "^6.24.1",
        "babel-register": "^6.26.0",
        "jest": "^25.3.0"
    }
}

这是错误:

代码语言:javascript
运行
复制
Plugin/Preset files are not allowed to export objects, only functions. In /home/usuario/practicing/javascript/queue/node_modules/babel-preset-es2015/lib/index.js

有人知道如何解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-25 18:49:40

你得到的错误意味着你的预设之一与巴别塔版本不兼容。

看看你的package.json,你使用的是babel版本6,但jestbabel-jest都使用的是更高版本的babel。这会导致es2015预设无法正常工作。

如果您绑定到当前版本的babel,则可以将jest和babel-jest依赖项降级为使用旧版本的babel:

代码语言:javascript
运行
复制
npm uninstall --save-dev babel-jest jest
npm install --save-dev babel-jest@23.6.0 jest@23.6.0

如果没有,我建议将你的babel版本(babel-clibabel-registerbabel-preset-es2015包)升级到更新的版本。

如果您遵循第二种方法,请注意,不推荐使用babel-preset-es2015,而建议使用@babel/preset-env

票数 1
EN

Stack Overflow用户

发布于 2020-04-29 15:10:01

我终于找到了解决这个问题的办法。如果其他人也有同样的问题,我会在这里分享配置。

这是我的文件queue.js

代码语言:javascript
运行
复制
export default class Queue {
    constructor() {
        ...
    }
    //Adds a new elemnt to the queue
    method1(element) {
        ...
    }
    .
    .
    .
}

这是我的测试文件

代码语言:javascript
运行
复制
import Queue from "../src/queue";

const myQueue = new Queue();

describe("Queue", () => {
    ...
    ...
    ...

});

我决定使用.babelrc文件的babel.config.js文件。这就是这个新文件的内容。

代码语言:javascript
运行
复制
module.exports = {
    presets: [["@babel/preset-env", { targets: { node: "current" } }]],
};

这是我的package.json文件。干净的、构建的、开发的、生产的和测试的脚本运行正常,没有错误。

代码语言:javascript
运行
复制
{
    "name": "queue",
    "version": "1.0.0",
    "description": "An implementation of a queue data structure",
    "main": "queue.js",
    "scripts": {
        "test": "jest",
        "clean": "rm -dr dist",
        "build": "npm run clean && babel src -s -d dist ",
        "production": "npm run build && node bin/production",
        "dev": "npm run build && node bin/dev"
    },
    "author": "Osiris Román",
    "license": "ISC",
    "devDependencies": {
        "@babel/cli": "^7.8.4",
        "@babel/core": "^7.9.0",
        "@babel/preset-env": "^7.9.5",
        "@babel/register": "^7.9.0",
        "babel-jest": "^25.5.0",
        "jest": "^25.3.0"
    }
}

感谢@mgarcia的评论,我决定避免使用babel-preset-es2015,而是使用推荐的@babel/preset-env。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61391878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档