2017-04-26 4 views
0

테스트를 작성하려고하는 기존 애플리케이션이 있습니다. 나는 두 경로에 대한 테스트를 작성하는 것을 시도하고있다React & Jest global.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(); 
}); 

문제이 같은 사용자 입력 (나의 코드)를 얻을 수있는 window.confirm 상자를 사용하는 구성 요소의 기능을 가지고 global.confirm이 두 번째 테스트를 위해 업데이트되지 않는다는 것입니다. 첫 번째 테스트를 false으로 설정하면 분명히 실패하지만 두 번째 테스트는 실패합니다. 첫 번째를 true으로 설정하면 첫 번째는 통과하지만 두 번째는 실패합니다. 왜냐하면 global.confirm = jest.fn(() => false)이 실제로 window.confirm을 false로 평가하지 않기 때문입니다. 내가 첫 번째 코멘트를하면 두 번째 패스는 잘됩니다.

나는 window.confirm을 조롱 해봤는데 정확히 동일한 동작을합니다.

답변

1

명백한 문제였습니다. NetworkWebAPIUtils.unassignSeat에서 가짜 전화를 지우는 것을 잊었습니다.

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