Skip to content

Instantly share code, notes, and snippets.

@snshn
Created September 20, 2018 04:53
Show Gist options
  • Save snshn/621cec932ef31308c52f5b330af76a83 to your computer and use it in GitHub Desktop.
Save snshn/621cec932ef31308c52f5b330af76a83 to your computer and use it in GitHub Desktop.
mock XMLHttpRequest class
(function(w){
if ('NativeXMLHttpRequest' in w) return;
// Preserve the native XMLHttpRequest class
w.NativeXMLHttpRequest = w.XMLHttpRequest;
class XMLHttpRequestEventTarget extends EventTarget {
constructor() {
super();
this.onloadstart = null;
this.onprogress = null;
this.onabort = null;
this.onerror = null;
this.onload = null;
this.ontimeout = null;
this.onloadend = null;
}
};
class XMLHttpRequestUpload extends XMLHttpRequestEventTarget {
constructor() {
super();
}
}
class XMLHttpRequest extends XMLHttpRequestEventTarget {
constructor() {
super();
// event handler
this.onreadystatechange = null;
// states
this.readyState = 0;
// request
this.timeout = 0;
this.withCredentials = false;
this.upload = new XMLHttpRequestUpload;
// response
this.responseURL = '';
this.status = 0;
this.statusText = '';
this.responseType = '';
this.response = '';
this.responseText = '';
this.responseXML = null;
}
}
// states
XMLHttpRequest.prototype.UNSENT = 0;
XMLHttpRequest.prototype.OPENED = 1;
XMLHttpRequest.prototype.HEADERS_RECEIVED = 2;
XMLHttpRequest.prototype.LOADING = 3;
XMLHttpRequest.prototype.DONE = 4;
// request
XMLHttpRequest.prototype.open = function (method, url, async = true, username = null, password = null) {
console.log('open', arguments);
};
XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
console.log('setRequestHeader', arguments);
};
XMLHttpRequest.prototype.send = function (body = null) {
console.log('send', arguments);
};
XMLHttpRequest.prototype.abort = function () {
console.log('abort', arguments);
};
// response
XMLHttpRequest.prototype.getResponseHeader = function (name) {
console.log('getResponseHeader', arguments);
return null;
};
XMLHttpRequest.prototype.getAllResponseHeaders = function () {
return '';
};
XMLHttpRequest.prototype.overrideMimeType = function (mime) {
if (arguments.length < 1) {
throw new TypeError(`Failed to execute 'overrideMimeType' on 'XMLHttpRequest': 1 argument required, but only 0 present.`);
}
};
w.XMLHttpRequest = XMLHttpRequest;
})(window);
/*
// Revert:
(function(w){
if ('NativeXMLHttpRequest' in w) {
w.XMLHttpRequest = w.NativeXMLHttpRequest;
delete w.NativeXMLHttpRequest;
}
})(window);
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment