Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

170
Vistas
broma es fallar al encontrar `bota` y `atob`

Crear una prueba de broma como:

 test("btoa", () => { expect(btoa("aaa")).toStrictEqual("YWFh"); });

falla con

 ReferenceError: btoa is not defined

sin embargo, node define btoa a partir del nodo 16, y así lo siguiente:

 console.log(bota("aaa"))

emite correctamente YWFh .

¿Cómo puedo configurar jest para que pase esta prueba? Claramente, algo está sucediendo en el corredor de prueba de broma para que no se ejecute en el entorno de nodo actual, o de lo contrario está eliminando elementos integrados específicos, solo que parece que no puedo encontrar ninguna documentación sobre cómo depurar o ajustar esto.

Actualizar

Hay soluciones al escribir la codificación manualmente en "js puro" o dependiendo de algo que sea similar, pero estoy particularmente interesado en por qué el final de la ejecución de broma no encuentra elementos integrados que parecen estar presentes en otros entornos.

Esto también funciona bien en otros marcos de prueba como mocha, por lo que está claramente relacionado con el corredor de bromas en particular.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Actualizar

Después de mucho buscar y rascarme la cabeza en cuanto a por qué btoa/atob están disponibles en el nodo pero NO están disponibles en broma ejecutándose en el nodo, finalmente lo descubrí. Jest ejecuta todas las pruebas dentro de una vm , que es un entorno aislado de espacio aislado. Los métodos btoa/atob no se exponen automáticamente en el objeto global dentro de una máquina virtual. Mejor explicado con un ejemplo:

 const vm = require('vm'); // this works outside the vm - but for legacy reasons only // you shouldn't be doing this in the first place btoa('aaa'); // -> "YWFh" const context = vm.createContext({}); const code = 'btoa("aaa")'; vm.runInContext(code, context); //-> Uncaught ReferenceError: btoa is not defined

Nota: La respuesta que se describe a continuación sigue siendo la "solución": debe definir estos métodos para usarlos en el nodo y, luego, debe exponerlos mediante el globalSetup de jest.


respuesta original

La raíz de su problema es el hecho de que NodeJS y los navegadores web tienen diferentes API. Por ejemplo, recibo este aviso de desaprobación cuando trato de usar btoa en mi aplicación de nodo.

mensaje de obsolescencia btoa

La primera parte de la solución es que debe proporcionar sus propios métodos atob / btoa para usar en NodeJs (consulte los ejemplos aquí ). Luego, debe hacer que estén disponibles utilizando la configuración globalSetup de jest:

 /** Encodes a string as base64 format */ global.btoa = (str: string) => Buffer.from(str, 'binary').toString('base64'); /** Decodes a base64 encoded string */ global.atob = (str: string) => Buffer.from(str, 'base64').toString('binary');

Si no se siente cómodo haciéndolo usted mismo, existen bibliotecas y herramientas que lo hacen por usted (jsdom, phantomjs, testing-library). Estas bibliotecas esencialmente replican las API del navegador en un entorno de nodo para hacer cosas como ejecutar pruebas, renderizado del lado del servidor, etc. Recomiendo leer sobre pruebas de marcos web para ejemplos de código y técnicas.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda