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.

Ejecutando pruebas unitarias en el tiempo de ejecución de JS para la declaración de importación de es6.

Soy muy nuevo en NodeJS y también en JS. He intentado leer sobre recursos como babel y rewire que ayudan a resolver las dependencias de ES6. Pero terminé confundido.

Estoy tratando de escribir pruebas unitarias para un archivo de ejecución de JS que tiene declaraciones de importación. El problema es que este archivo es un archivo de tiempo de ejecución. Esto significa que el módulo de importación solo funciona cuando se ejecuta en el navegador dentro de la plataforma/aplicación dependiente.

archivoTiempoEjecucion.js

import {something} from ‘other-module’

function foo(){
}

export const aSerProbado = {
foo
}

pruebaUnitaria.js

const aSerProbado = require(‘./archivoTiempoEjecucion’).aSerProbado

describe(‘alguna prueba’, () => {
it(‘prueba una función’, () => {
const resultado = aSerProbado.foo();
});
});

Cuando intento ejecutar esta prueba unitaria usando mocha, obtengo:

SyntaxError: Token { inesperado

Esto se debe a la declaración de importación en archivoTiempoEjecucion.js.

Entonces mi pregunta es la siguiente:

  1. ¿Cómo puedo simular la declaración de importación?
  2. No estoy seguro de qué configuración necesito hacer para deshacerme de este error de sintaxis.

Puedo proporcionar más información según sea necesario.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript y Node.js, puedo sugerir las siguientes soluciones para tu problema:

    1. Simular la declaración de importación se puede lograr utilizando herramientas como Rewire o Proxyquire. Estas herramientas te permiten reemplazar el módulo importado con una versión simulada, que se puede definir en tu archivo de prueba. Por ejemplo, usando Rewire, tu código se vería así:
    const runtimeFile = rewire('./runtimeFile');
    runtimeFile.__set__('something', mockSomething);
    const toBeTested = runtimeFile.toBeTested;
    // mockSomething es la versión simulada del módulo 'other-module'.
    
    1. El error de sintaxis que estás enfrentando se debe a que Mocha no entiende la sintaxis ES6 de forma predeterminada. Puedes utilizar una herramienta como Babel para transpilar tu código a sintaxis ES5, que puede ser entendida por Node.js y Mocha. Debes instalar los paquetes @babel/core, @babel/preset-env y @babel/register utilizando npm. Una vez instalados, agrega el siguiente código al principio de tu archivo de prueba unitaria:
    require('@babel/register')({
      presets: ['@babel/preset-env']
    });
    

    Esto transpilará tu código sobre la marcha cuando Mocha ejecute tus pruebas. Asegúrate de que tu archivo runtimeFile.js esté escrito en una sintaxis ES6 válida, y debería funcionar.

    Espero que esto te ayude. Avísame si necesitas más orientación.

Comments are closed.