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

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

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 Report

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 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!