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.

El Jest mock no cubre el código como se esperaba.

Estoy tratando de cubrir la siguiente función con la prueba unitaria de Jest.

export const submitCampaignForm = (
formData: IFormContextValues,
mutate: (formData: IFormContextValues, setCamapignId: any) => void,
setCamapignId: (val: string) => void,
): void => {
mutate(formData, {
onSuccess: (data: ICampaignResponse) => {
if (data.id) {
setCamapignId(data.id);
}
},
});
};

it(‘should call the submit handler’, () => {
const mutateSpy = jest.fn().mockImplementation(() => ({
onSuccess: jest
.fn()
.mockImplementation((data: ICampaignResponse) => data.id),
}));
const updateSpy = jest.fn();
submitCampaignForm(request, mutateSpy, updateSpy);
expect(mutateSpy).toHaveBeenCalled();
});

Para ser honesto, no estoy seguro de que “mutateSpy” sea la forma correcta de simular esa función. La prueba está pasando, pero no está cubriendo las líneas a continuación, ¿qué cambio se requiere para cubrir estas líneas?

onSuccess: (data: ICampaignResponse) => {
if (data.id) {
setCamapignId(data.id);
}
},

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cubrir la función onSuccess y probar si setCampaignId es llamada con data.id, se puede modificar la implementación de mutateSpy para que devuelva un objeto que contenga una función onSuccess que llame a la función simulada setCampaignId con un valor ficticio de data.id. Así es como se puede ajustar el código:

    `
    it('should call the submit handler', () => {
    const mutateSpy = jest.fn().mockReturnValue({
    onSuccess: jest.fn().mockImplementation((data: ICampaignResponse) => {
    if (data.id) {
    setCampaignIdMock(data.id);
    }
    }),
    });
    const setCampaignIdMock = jest.fn(); // crear una simulación para setCampaignId
    const updateSpy = jest.fn();
    submitCampaignForm(request, mutateSpy, setCampaignIdMock); // pasa setCampaignIdMock en lugar de updateSpy
    expect(mutateSpy).toHaveBeenCalled();
    expect(setCampaignIdMock).toHaveBeenCalledWith(dummyId); // el valor de dummyId depende del escenario de prueba
    });
    `

    El mutateSpy actualizado devolverá un objeto con una función onSuccess que será llamada por la función submitCampaignForm cuando se llame a mutate. La función onSuccess extraerá el valor de data.id, comprobará si existe y llamará a la función simulada setCampaignIdMock con el valor extraído. De esta manera, se puede asegurar que la función setCampaignId es llamada con el argumento correcto cada vez que se llame a la función onSuccess.

Comments are closed.