/ / React & Jest global.confirm не актуализира между тестове - реагира, jestjs, ензим, babel-jest

React & Jest global.confirm не се актуализира между тестовете - reactjs, jestjs, enzime, babel-jest

Имам едно съществуващо приложение, за което се опитвам да напиша тестове. Имам компонент функция, която използва window.confirm поле, за да получите вход на потребителя (не ми код), като този:

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

Опитвам се да напиша тестове за двата пътеки:

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

Проблемът е, че global.confirm няма да се актуализира за втория тест. Ако задам първия тест false тогава очевидно не успее, но втората минава. Ако задам първото true тогава първото преминава, но втората не успее, защото global.confirm = jest.fn(() => false) всъщност не причинява window.confirm, за да прецени, че е фалшив. Ако коментирам първото, то второто минава добре.

Опитах да подигравам window.confirm и получавам точно същото поведение.

Отговори:

1 за отговор № 1

Това беше очевиден проблем. Забравих да изчистя подигравките обаждания от NetworkWebAPIUtils.unassignSeat.

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