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

94
Views
Obtenga la implementación original durante el simulacro de broma

Estoy tratando de simular temporalmente la búsqueda de nodos en un módulo ESM mientras sigo volviendo a entrenar la implementación original para poder acceder al valor de un punto final real. Sin embargo, este error dice "Debe usar la importación para cargar el Módulo ES". Reconozco que la compatibilidad con jest para ESM aún está pendiente. ¿Hay alguna forma de tener este comportamiento en una combinación de Node, ES6 y Jest actuales?

trabajador.ts (dependencia):

 export default async () => { const response = await fetch("http://example2.org"); return await response.json() }

principal.prueba.ts:

 import { jest } from "@jest/globals"; jest.mock("node-fetch", () => { return Promise.resolve({ json: () => Promise.resolve({ myItem: "abc" }), }) }) import doWork from './worker.js'; import mockedFetch from 'node-fetch'; const originalFetch = jest.requireActual('node-fetch') as any; test("Ensure mock", async () => { const result = await doWork(); expect(result.myItem).toStrictEqual("abc"); expect(mockedFetch).toBeCalledTimes(1); const response = await originalFetch("http://www.example.org"); expect(response.status).toBe(200); const result2 = await doWork(); expect(result2.myItem).toStrictEqual("abc"); expect(mockedFetch).toBeCalledTimes(2); });
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Primero, Jest no admite jest.mock en el módulo ESM para pruebas

Tenga en cuenta que actualmente no admitimos jest.mock de manera limpia en ESM, pero eso es algo para lo que tenemos la intención de agregar soporte adecuado en el futuro. Siga este problema para obtener actualizaciones.

Esto es razonable porque import tiene una semántica diferente a require . Todas las importaciones se elevan y se evaluarán en la carga del módulo antes que cualquier código de módulo .

Entonces, en su caso, debido a que está usando jest.mock , asumo que su código de prueba se transforma . En este caso, si desea utilizar un paquete que no sea "CommonJS", también debe transformarlo. Puede cambiar transformIgnorePatterns en jest config a [] . Significa que todos los paquetes de node_modules se transformarán. Si es demasiado agresivo, puede elegir módulos específicos que ignoren "transformIgnorePatterns": [ "node_modules/(?!(node-fetch))" ] pero no se olvide de las dependencias transitivas. ;)

  • Agregar/cambiar en la configuración de broma
 "transformIgnorePatterns": []
  • jest.mock acepta la fábrica de módulos que debería devolver el código exportado. En tu caso, deberías escribirlo así.
 jest.mock("node-fetch", () => { return { __esModule: true, default: jest.fn(() => Promise.resolve({ json: () => Promise.resolve({ myItem: "abc" }), }) ), }; });

si tienes un error

La fábrica de módulos de jest.mock() no puede hacer referencia a ninguna variable fuera del alcance

simplemente elimine jest de la importación y utilícelo como variable global o impórtelo dentro de la función de fábrica del módulo https://github.com/facebook/jest/issues/2567

  • Cambie const originalFetch = jest.requireActual('node-fetch') a
 const originalFetch = jest.requireActual('node-fetch').default;
about 4 years ago · Juan Pablo Isaza 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!