/ / React & Jest global.confirm nie aktualizuje się między testami - Reagjs, Jestjs, Enzym, Babel-Jest

React & Jest global.confirm nie aktualizuje się między testami - reactjs, jestjs, enzym, babel-jest

Mam istniejącą aplikację, dla której próbuję napisać testy. Mam funkcję komponentu, która korzysta z okna.confirm, aby uzyskać dane wejściowe użytkownika (nie mój kod):

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

Próbuję napisać testy dla obu ścieżek:

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();
});

Problem polega na tym, że global.confirm nie zaktualizuje się do drugiego testu. Jeśli ustawię pierwszy test na false wtedy oczywiście się nie udaje, ale drugi mija. Jeśli ustawię pierwszy na true wtedy pierwszy przechodzi, ale drugi kończy się niepowodzeniem, ponieważ global.confirm = jest.fn(() => false) tak naprawdę nie powoduje, że window.confirm ma wartość false. Jeśli skomentuję pierwszy, drugi przejdzie dobrze.

Próbowałem wyśmiać Window.confirm i otrzymuję dokładnie to samo zachowanie.

Odpowiedzi:

1 dla odpowiedzi № 1

To był oczywisty problem. Zapomniałem usunąć próbne połączenia z NetworkWebAPIUtils.unassignSeat.

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