es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Esto es una prueba de un método de clase que tiene una función interna.

Estoy escribiendo una prueba unitaria para uno de mis archivos .ts. Donde estoy enfrentando un problema y no puedo encontrar la solución. Espero que alguien pueda ayudarme a resolverlo.

Problema

Mientras escribo la prueba unitaria, no puedo probar el valor de perfil. Después de llamar a un método llamado getProfile ().

Configuración de archivo

Perfil.ts

import { getProfileAPI } from “./api”;

class ProfileDetails implements IProfileDetails {

public profile: string = ”;

constructor() {}

getProfile = async () => {
const { data } = await getProfileAPI();
if (data) {
this.profile = data
}
};
}

const profileDetail = new ProfileDetails();
export default profileDetail;

Perfil.spec.ts

import Profile from ‘./Perfil’;

describe (‘Profile’, () => {
it (‘getProfile’, async () => {
Profile.getProfile = jest.fn();
await Profile.getProfile();
expect (Profile.getProfile).toHaveBeenCalled();
});
});

El desafío que enfrento aquí es que puedo simular el método getProfile. Pero no puedo simular la función getProfileAPI que se llama dentro del método getProfile.

¿Cómo puedo simular una función que se llama dentro de un método simulado (o) hay alguna otra forma de resolver esto? Por favor ayuda.

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para simular una función llamada dentro de un método simulado, puedes usar la API jest.mock.

    Así es como puedes modificar tu archivo Profile.spec.ts para simular la función getProfileAPI:

    import Profile from './Profile';
    import { getProfileAPI } from './api';
    
    jest.mock('./api', () => ({
      getProfileAPI: jest.fn(() => Promise.resolve({ data: 'datos falsificados' })),
    }));
    
    describe('Profile', () => {
      it('getProfile', async () => {
        await Profile.getProfile();
        expect(getProfileAPI).toHaveBeenCalled();
        expect(Profile.profile).toEqual('datos falsificados');
      });
    });
    

    En el ejemplo anterior, estamos utilizando la función jest.mock para simular la función getProfileAPI. Por defecto, jest.mock devolverá una fábrica de módulos que devuelve un objeto vacío. Sin embargo, podemos proporcionar una implementación simulada para la función getProfileAPI utilizando el segundo argumento de jest.mock.

    En este caso, estamos devolviendo una función simulada de Jest que devuelve una promesa resuelta con un objeto de datos falsificados.

    Luego podemos probar la función getProfile y afirmar que se ha llamado a la función getProfileAPI y que la propiedad profile se ha establecido en los datos falsificados.

    ¡Espero que esto ayude!

Comments are closed.