Tengo un problema para hacer una prueba unitaria con broma sobre una clase es6. No sé si las configuraciones se hicieron correctamente o si necesito algún paquete adicional.

Este es mi archivo queue.js

export default class Queue {
    constructor() {
        ...
    }
    //Adds a new elemnt to the queue
    method1(element) {
        ...
    }
    .
    .
    .
}

Este es mi archivo de prueba

import Queue from "../src/queue";

const myQueue = new Queue();

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

});

Este es mi archivo .babelrc

{
    "presets": ["es2015"]
}

Este es mi archivo package.json. Las secuencias de comandos de limpieza, compilación y producción se ejecutan correctamente, pero cuando intento ejecutar la prueba, aparece un error.

{
    "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"
    }
}

Este es el error:

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

¿Alguien sabe cómo puedo resolver este problema?

1
Osiris 23 abr. 2020 a las 19:11

2 respuestas

La mejor respuesta

El error que está recibiendo significa que uno de sus ajustes preestablecidos no es compatible con la versión de babel.

Mirando su package.json está usando la versión 6. de babel. Pero tanto jest como babel-jest usan versiones posteriores de babel. Esto hace que su preset es2015 no funcione correctamente.

Si está vinculado a su versión actual de babel, puede degradar sus dependencias jest y babel-jest a una versión que use versiones anteriores de babel:

npm uninstall --save-dev babel-jest jest
npm install --save-dev babel-jest@23.6.0 jest@23.6.0

De lo contrario, recomendaría actualizar su versión de babel (babel-cli, babel-register y babel-preset-es2015 paquetes) a versiones más nuevas.

Si sigue esta segunda ruta, tenga en cuenta que babel-preset-es2015 está en desuso y se recomienda el uso de @babel/preset-env en su lugar.

1
mgarcia 25 abr. 2020 a las 10:49

Finalmente encontré cómo resolver el problema. Compartiré aquí la configuración si alguien más tiene el mismo problema.

Este es mi archivo queue.js

export default class Queue {
    constructor() {
        ...
    }
    //Adds a new elemnt to the queue
    method1(element) {
        ...
    }
    .
    .
    .
}

Este es mi archivo de prueba

import Queue from "../src/queue";

const myQueue = new Queue();

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

});

Decidí usar el archivo babel.config.js en lugar del archivo .babelrc. Este es el contenido de este nuevo archivo.

module.exports = {
    presets: [["@babel/preset-env", { targets: { node: "current" } }]],
};

Este es mi archivo package.json. Las secuencias de comandos clean, build, dev, production y test se ejecutan correctamente sin errores.

{
    "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"
    }
}

Gracias al comentario de @mgarcia, decidí evitar babel-preset-es2015 para usar el @ babel / preset-env recomendado.

0
Osiris 29 abr. 2020 a las 07:10