es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mocha / Webpack: No se puede utilizar la declaración de importación fuera de un módulo.

Soy nuevo en Node y en las pruebas de JS. Tengo una aplicación web con Webpack como empaquetador. Tengo algunos puntos de entrada JS que se incluyen en la página. Los puntos de entrada usan archivos de módulo como este:

export default function() {
    ...
}

Ahora me gustaría hacer pruebas unitarias a este módulo. He elegido Mocha, pero no es crítico para mí. Podría ser Jest o cualquier otra cosa.

Escribí un archivo de prueba muy simple test.js como este. No hace nada, solo prueba si toda la configuración funciona:

import foo from '../js/someModuleOfMine'

const assert = require('assert')

describe('Test Suite', () => {
    it('should at least run', () => {
        assert.equal(true, true)
    })
})

Al ejecutar mocha desde la línea de comandos, me da este error:

import foo from '../js/someModuleOfMine'
^^^^^^

SyntaxError: No se puede usar la declaración de importación fuera de un módulo

Siguiendo algunos consejos, intenté agregar "type": "module" a mi package.json, pero solo cambió el error a algo aún más obscuro:

Error: No soportado

Definitivamente me estoy perdiendo algo obvio, pero no puedo entender qué es.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI en javascript, webpack, ecmascript-6 y mocha.js, parece que el principal problema que estás enfrentando es con la importación de módulos en tu script de prueba.

    Para poder utilizar las declaraciones de importación en tu script de prueba, necesitas utilizar el módulo “esm”, que te permite usar los Módulos ECMAScript en Node.js. Para instalar este módulo, puedes utilizar el siguiente comando:

    npm install --save-dev esm
    

    Una vez que hayas instalado esm, puedes actualizar tu script de prueba para usarlo:

    import assert from 'assert';
    import foo from '../js/someModuleOfMine.js';
    import { describe, it } from 'mocha';
    
    describe('Test Suite', () => {
      it('should at least run', () => {
        assert.equal(true, true);
      });
    });
    

    Ten en cuenta que necesitas incluir la extensión “.js” en tu declaración de importación, y también necesitas importar describe e it de mocha.

    Por último, para ejecutar tu script de prueba utilizando esm, puedes utilizar el siguiente comando:

    mocha --require esm test.js
    

    Esto debería permitirte ejecutar tu script de prueba sin encontrar errores.

Comments are closed.