UNPKG

http-request-mock

Version:

Intercept & mock http requests issued by XMLHttpRequest, fetch, nodejs https/http module, axios, jquery, superagent, ky, node-fetch, request, got or any other request libraries by intercepting XMLHttpRequest, fetch and nodejs native requests in low level.

115 lines (114 loc) 4.19 kB
import Mocker from '../mocker/mocker'; import Base from './base'; export default class XMLHttpRequestInterceptor extends Base { private static instance; private xhr; constructor(mocker: Mocker, proxyServer?: string); /** * https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest * Logic of intercepting XMLHttpRequest object. */ private intercept; /** * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open * Logic of intercepting XMLHttpRequest.open method. */ private interceptOpen; /** * Logic of intercepting XMLHttpRequest.send method. */ private interceptSend; /** * Set remote result. * @param {XMLHttpRequestInstance} xhr * @param {Record<string, string>} remoteInfo */ private sendRemoteResult; /** * Get original response * @param {XMLHttpRequestInstance} xhr */ private getOriginalResponse; /** * Make mock request. * @param {XMLHttpRequestInstance} xhr * @param {RemoteResponse | null} remoteResponse */ private doMockRequest; private setTimeoutTimer; /** * Make mock response. * @param {XMLHttpRequestInstance} xhr * @param {RemoteResponse | null} remoteResponse */ private doMockResponse; /** * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#event_handlers * Call some necessary callbacks if specified. Trigger some necessary events. * 'onreadystatechange' as a property of the XMLHttpRequest instance is supported in all browsers. * Since then, a number of additional on* event handler properties have been implemented in various * browsers (onload, onerror, onprogress, etc.). See Using XMLHttpRequest. More recent browsers, * including Firefox, also support listening to the XMLHttpRequest events via standard addEventListener() APIs * in addition to setting on* properties to a handler function. * @param {XMLHttpRequest} xhr */ private sendResult; private event; private progressEvent; /** * https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/getAllResponseHeaders * Logic of intercepting XMLHttpRequest.getAllResponseHeaders method. */ private interceptGetAllResponseHeaders; /** * https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/getResponseHeader * Logic of intercepting XMLHttpRequest.getResponseHeader method. */ private interceptGetResponseHeader; /** * Logic of intercepting XMLHttpRequest.interceptSetRequestHeader method. */ private interceptSetRequestHeader; /** * Get getter function by key. * @param {string} key */ private getGetter; /** * Logic of intercepting XMLHttpRequest.readyState getter. * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState */ private interceptReadyState; /** * Logic of intercepting XMLHttpRequest.status getter. * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status */ private interceptStatus; /** * Logic of intercepting XMLHttpRequest.statusText getter. * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/statusText */ private interceptStatusText; /** * Logic of intercepting XMLHttpRequest.responseText getter. */ private interceptResponseText; /** * Logic of intercepting XMLHttpRequest.response getter. * * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType * When setting responseType to a particular value, the author should make * sure that the server is actually sending a response compatible with that * format. If the server returns data that is not compatible with the * responseType that was set, the value of response will be null. */ private interceptResponse; /** * Logic of intercepting XMLHttpRequest.responseURL getter. */ private interceptResponseURL; /** * Logic of intercepting XMLHttpRequest.responseXML getter. */ private interceptResponseXML; }