0
我有一個現有的應用程序,我正在爲其編寫測試。我有一個使用window.confirm框來獲取這樣的用戶輸入(不是我的代碼)的組件功能: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();
});
問題是global.confirm不會更新第二個測試。如果我將第一次測試設置爲false
那麼它顯然會失敗,但第二次測試通過。如果我將第一個設置爲true
,那麼第一個通過但第二個失敗,因爲global.confirm = jest.fn(() => false)
實際上並不導致window.confirm評估爲false。如果我註釋掉第一個,那麼第二個傳球很好。
我試過嘲笑window.confirm和我得到完全相同的行爲。