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

279
Vistas
JEST: La función de mi módulo aislado depende de una función que se encuentra en el mismo módulo. Después de burlarse, todavía se basa en la implementación original.

tengo

abc.js

 const a = (a)=>{ return (b(a) + 1) } const b = (num)=>{ return(num + 1) } module.exports = { a, b }

Cuando realicé mi prueba para la función a, quería una implementación simulada de la función b. pero la función a, después de burlarse, todavía ha estado usando la implementación original en lugar de mi simulacro.

mi prueba se ve algo como

abs.prueba.js

 const { a } = require('./abc') describe('/abc functions',()=>{ beforeEach(()=>{ jest.mock('./abc',()=>( b = jest.fn.mockReturnValue(5) )) }) afterEach(()=>{ jest.clearAllMocks() }) it('uses the b() mock',()=>{ const aResult = a(1) expect(aResult).toBe(6) }) })

pero obtengo un resultado de 2 o cualquiera que sea la implementación original. Solo quería que mi función a usara mi simulacro y nunca lo hace. siempre vuelve a la implementación original.

Probé jest.isolate() para aislar la función que estoy probando. Probé diferentes formas de burlarme como jest.fn(), jest.spyOn y el método sobre jest.requireActual(moduleName)

Probé b = jest.fn().mockImplementation(()=>{})

Estoy confundido en cuanto a por qué la función a, incluso después del aislamiento, todavía se basa en la implementación original de la función b...

¡gracias de antemano!

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

0

Debe recordar las reglas del alcance léxico y cómo se relaciona con el concepto de cierres. La respuesta corta sería que la razón por la que su prueba no funciona es porque en su módulo abc.js su función a() llama dentro de su cuerpo a la función b() que ha sido declarada en ese mismo módulo. El entorno donde se definió la función y NO aquel donde se llama es lo que se denomina alcance léxico. Esta combinación del cuerpo de una función que hace uso de los enlaces donde se definió y la llamada de esa función en el contexto de esos enlaces/entorno existentes es lo que se llama un cierre. Entonces, no importa si te burlas de una función b() y tratas de usar esa simulación para alterar el valor de retorno de a() , a() siempre usará la función original b() porque esas son las reglas de dictado de alcance léxico

about 4 years ago · Juan Pablo Isaza Denunciar

0

Diferentes enfoques para resolver el problema. una de ellas es "modularizar" aún más estas funciones dividiéndolas en sus propios módulos. más información sobre este hilo: github.com/facebook/jest/issues/936#issuecomment-545080082

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