Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

172
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda