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

257
Vistas
node-fetch 3.0.0 y jest da SyntaxError: no se puede usar la declaración de importación fuera de un módulo

Estoy tratando de actualizar mi API para usar node-fetch 3.0.0. Parte de los cambios importantes en su documentación es que node-fetch ahora es un módulo ESM puro.

https://github.com/node-fetch/node-fetch/blob/main/docs/CHANGELOG.md

Mis pruebas unitarias han comenzado a romperse con este cambio. Estaba usando jest.requireActual("node-fetch") para el objeto de respuesta

 const { Response } = jest.requireActual("node-fetch");

Sin embargo, con el nuevo cambio, obtengo:

"La propiedad 'Respuesta' no existe en el tipo '{}'".

Intenté cambiar a una declaración de importación que parece corregir ese error:

 import { Response } from "node-fetch"

Ahora, recibo el siguiente error cuando ejecuto mis pruebas unitarias:

 Test suite failed to run Jest encountered an unexpected token This usually means that you are trying to import a file which Jest cannot parse, eg it's not plain JavaScript. By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules". Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/en/ecmascript-modules for how to enable it. • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (eg binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/en/configuration.html Details: C:\Users\{mypath}\api\node_modules\node-fetch\src\index.js:9 import http from 'http'; ^^^^^^ SyntaxError: Cannot use import statement outside a module 2 | import { AuthProvider, TokenCache } from "./tokenTypes"; 3 | import { getUserEmail, getUserId, getUserRole } from "../common/authUtil"; > 4 | import fetch from "node-fetch";

El error parece estar ocurriendo dentro de node-fetch.

Intenté cambiar el script de prueba en mi paquete.json para que coincida con lo que sugiere la documentación de broma para los módulos ESM. https://jestjs.io/docs/ecmascript-modules

paquete.json

 "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"

La documentación también sugiere cambiar la propiedad de transformación en jest.config.js para tomar un objeto vacío, pero mi objeto de transformación se parece a lo siguiente para mecanografiado y ts-jest:

jest.config.js

 transform: { "^.+\\.ts?$": "ts-jest" }

Si cambio esto a un objeto vacío, todas mis pruebas se rompen. No estoy muy familiarizado con CJS vs ESM, por lo que agradecería cualquier ayuda.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Fetch 3.0 está diseñado para usar esmodules en lugar de commonjs. Por lo tanto, debe asegurarse de importarlo en un módulo.

Por ejemplo: para importarlo a app.js: agregue "type":"module" en su paquete.json y luego impórtelo.

Para importarlo a otros archivos o incluso a app.js, también puede cambiar la extensión de .js a mjs que le indicará a nodejs que lo trate como un esmodule.

De lo contrario, baje la categoría de fetch para usar una versión anterior que admita commonjs como 2.something.

 npm install node-fetch@2 npm install @types/node-fetch@2
over 4 years ago · Santiago Trujillo Denunciar

0

¡Yo tuve el mismo problema! agregando

 transform: { "^.+\\.(ts|tsx)$": "ts-jest", "^.+\\.(js)$": "babel-jest", }, transformIgnorePatterns: [ ],

a mi archivo jest.config.js lo resolvió. y por cierto estas son mis versiones:

 "jest": "^27.3.1", "ts-jest": "^27.0.7", "node-fetch": "^3.1.0"
over 4 years ago · Santiago Trujillo 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