mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-23 11:57:46 +08:00
Add support for ontimeout and onerror handler when using XMLHttpRequest for Android and iOS
Summary:Currently React-Native does not have `ontimeout` and `onerror` handlers for [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest). This is an extension to [No timeout on XMLHttpRequest](https://github.com/facebook/react-native/issues/4648). With addition to two handlers, both Android and iOS can now handle `ontimeout` if request times out and `onerror` when there is general network error. **Test plan** Code has been tested on both Android and iOS with [Charles](https://www.charlesproxy.com/) by setting a breakpoint on the request which fires `ontimeout` when the request waits beyond `timeout` time and `onerror` when there is network error. **Usage** JavaScript - ``` var request = new XMLHttpRequest(); function onLoad() { console.log(request.status); }; function onTimeout() { console.log('Timeout'); }; function onError() { console.log('General network error'); }; request.onload = onLoad; request.ontimeout = onTimeout; request.onerr Closes https://github.com/facebook/react-native/pull/6841 Differential Revision: D3178859 Pulled By: lexs fb-gh-sync-id: 30674570653e92ab5f7e74bd925dd5640fc862b6 fbshipit-source-id: 30674570653e92ab5f7e74bd925dd5640fc862b6
This commit is contained in:
committed by
Facebook Github Bot 9
parent
967dbd0cbe
commit
d09cd62011
48
Libraries/Network/__tests__/XMLHttpRequestBase-test.js
Normal file
48
Libraries/Network/__tests__/XMLHttpRequestBase-test.js
Normal file
@@ -0,0 +1,48 @@
|
||||
'use strict';
|
||||
|
||||
jest
|
||||
.autoMockOff()
|
||||
.dontMock('XMLHttpRequestBase');
|
||||
|
||||
const XMLHttpRequestBase = require('XMLHttpRequestBase');
|
||||
|
||||
describe('XMLHttpRequestBase', function(){
|
||||
var xhr;
|
||||
|
||||
beforeEach(() => {
|
||||
xhr = new XMLHttpRequestBase();
|
||||
xhr.ontimeout = jest.fn();
|
||||
xhr.onerror = jest.fn();
|
||||
xhr.onload = jest.fn();
|
||||
xhr.didCreateRequest(1);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
xhr = null;
|
||||
});
|
||||
|
||||
it('should call ontimeout function when the request times out', function(){
|
||||
xhr._didCompleteResponse(1, 'Timeout', true);
|
||||
|
||||
expect(xhr.ontimeout).toBeCalledWith(null);
|
||||
expect(xhr.onerror).not.toBeCalled();
|
||||
expect(xhr.onload).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('should call onerror function when the request times out', function(){
|
||||
xhr._didCompleteResponse(1, 'Generic error');
|
||||
|
||||
expect(xhr.onerror).toBeCalledWith(null);
|
||||
expect(xhr.ontimeout).not.toBeCalled();
|
||||
expect(xhr.onload).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('should call onload function when there is no error', function(){
|
||||
xhr._didCompleteResponse(1, null);
|
||||
|
||||
expect(xhr.onload).toBeCalledWith(null);
|
||||
expect(xhr.onerror).not.toBeCalled();
|
||||
expect(xhr.ontimeout).not.toBeCalled();
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user