/ / React & Jest global.confirm não atualizando entre testes - reactjs, jestjs, enzima, babel-jest

React & Jest global.confirme não atualizar entre os testes - reactjs, jestjs, enzima, babel-jest

Eu tenho um aplicativo existente para o qual estou tentando escrever testes. Eu tenho uma função de componente que usa uma caixa window.confirm para obter a entrada do usuário (não o meu código) assim:

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

Estou tentando escrever testes para os dois caminhos:

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

O problema é que o global.confirm não será atualizado para o segundo teste. Se eu definir o primeiro teste como false então obviamente falha, mas o segundo passa. Se eu definir o primeiro para true então o primeiro passa, mas o segundo falha porque global.confirm = jest.fn(() => false) na verdade, não faz com que window.confirm avalie como false. Se eu comentar o primeiro, o segundo passa muito bem.

Eu tentei zombar window.confirm e recebo exatamente o mesmo comportamento.

Respostas:

1 para resposta № 1

Era uma questão óbvia. Esqueci de limpar as chamadas simuladas do NetworkWebAPIUtils.unassignSeat.

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