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.
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óngetProfileAPI
:En el ejemplo anterior, estamos utilizando la función
jest.mock
para simular la funcióngetProfileAPI
. 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óngetProfileAPI
utilizando el segundo argumento dejest.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óngetProfileAPI
y que la propiedadprofile
se ha establecido en los datos falsificados.¡Espero que esto ayude!