Tengo un ejemplo bastante simple de un trabajo simulado, actualizando el valor correctamente, pero mi prueba aún falla.
fetchStuff.js :
const fetchStuff = async (entity, service) => { entity = await service.get(); console.log('entity is an expected result!', entity); // this consoles out the expected value correctly. } fetchStuff.spec.js :
it('should...', () => { const expected = 'this will show up in console'; const service.get = jest.fn().mockImplementation(() => expected); let entity; fetchStuff(entity, service); expect(entity).toEqual(expected) // entity = 'undefined' }); Cada vez, veo que console.log en la función está imprimiendo el resultado esperado, pero alguna razón por la expect(entity) siempre está undefined .
Probé cosas como flush-promise , probé eliminando await . Incluso he visto la técnica done() , donde le pasamos done , it decir it('should...', done => {...})
No estoy seguro de por qué no puedo obtener el resultado esperado correcto, aunque la consola muestra el resultado esperado.
PD. Entiendo que esto no respeta el paradigma funcional o las funciones puras. Por favor ignora eso.
Está utilizando una función asíncrona, pero está probando de inmediato, antes de que se resuelva la promesa. Necesita un async/await en su prueba, si está utilizando llamadas asincrónicas, como su await en la función principal.
it('should...', async () => { const expected = 'this will show up in console'; const service.get = jest.fn().mockImplementation(() => expected); let entity; await fetchStuff(entity, service); expect(entity).toEqual(expected) // entity = 'undefined' });Sin embargo, según el comentario sobre su pregunta, es posible que el código no devuelva lo que espera, por lo que este cambio para async/await no resolverá el problema por sí solo.
const fetchStuff = async (entity, service) => { entity = await service.get(); console.log('entity is an expected result!', entity); return entity; } it('should...', async () => { const expected = 'this will show up in console'; const FakeService = jest.fn().mockResolvedValue(expected), const entity = await FakeService(); expect(entity).toBe(expected) ; });