/ / React & Jest global.confirm no se actualiza entre pruebas - reactjs, jestjs, enzima, babel-jest

React & Jest global.confirm no se actualiza entre pruebas - reactjs, jestjs, enzima, babel-jest

Tengo una aplicación existente para la que estoy intentando escribir pruebas. Tengo una función de componente que utiliza un cuadro de confirmación de ventana para obtener la entrada del usuario (no mi código) como esta:

if (window.confirm("Are you sure to unassign?")) {
NetworkWebAPIUtils.unassignSeat(this.state.seatnetwork.seat.id, this.state.seatnetwork.network.id, this.props.rank);
}

Estoy tratando de escribir pruebas para ambos caminos:

it("should call endpoint when user selects yes", function () {
global.confirm = jest.fn(() => true);
seatUpdateRow.instance().handleChangeAssigned({target: {value: true}});

expect(NetworkWebAPIUtils.unassignSeat.mock.calls.length).toBe(1);
expect(NetworkWebAPIUtils.unassignSeat.mock.calls[0].length).toBe(3);
expect(NetworkWebAPIUtils.unassignSeat.mock.calls[0][0]).toBe(1234);
expect(NetworkWebAPIUtils.unassignSeat.mock.calls[0][1]).toBe(5678);
expect(NetworkWebAPIUtils.unassignSeat.mock.calls[0][2]).toBe(1);
});

it("should not call endpoint when user selects no", function () {
global.confirm = jest.fn(() => false);
seatUpdateRow.instance().handleChangeAssigned({target: {value: true}});

expect(NetworkWebAPIUtils.unassignSeat).not.toHaveBeenCalled();
});

El problema es que global.confirm no se actualizará para la segunda prueba. Si configuro la primera prueba para false entonces obviamente falla pero la segunda pasa. Si configuro el primero en true entonces el primero pasa pero el segundo falla porque global.confirm = jest.fn(() => false) en realidad no causa que window.confirm evalúe como falso. Si comento el primero, entonces el segundo pasa muy bien.

He intentado burlarse de window.confirm y obtengo exactamente el mismo comportamiento.

Respuestas

1 para la respuesta № 1

Era un problema obvio. Olvidé borrar las llamadas simuladas de NetworkWebAPIUtils.unassignSeat.

afterEach(function () {
NetworkWebAPIUtils.unassignSeat.mockClear();
});