Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

721
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!