2017-04-26 16 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が2回目のテストで更新されないということです。最初のテストをfalseに設定すると、明らかに失敗しますが、2番目のテストは成功します。最初の値をtrueに設定すると、最初の値は渡されますが、global.confirm = jest.fn(() => false)は実際にはfalseに評価されないため、2番目の値は失敗します。私が最初にコメントしたら、2回目はうまくいく。

私はwindow.confirmを嘲笑しようとしましたが、まったく同じ動作をします。

答えて

1

これは明らかな問題でした。私はNetworkWebAPIUtils.unassignSeatからモックコールをクリアするのを忘れてしまった。

afterEach(function() { 
    NetworkWebAPIUtils.unassignSeat.mockClear(); 
}); 
関連する問題