axios-mock-adapter
Advanced tools
Comparing version 1.7.1 to 1.8.0
@@ -10,43 +10,69 @@ (function webpackUniversalModuleDefinition(root, factory) { | ||
root["AxiosMockAdapter"] = factory(root["axios"]); | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_3__) { | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_5__) { | ||
return /******/ (function(modules) { // webpackBootstrap | ||
/******/ // The module cache | ||
/******/ var installedModules = {}; | ||
/******/ | ||
/******/ // The require function | ||
/******/ function __webpack_require__(moduleId) { | ||
/******/ | ||
/******/ // Check if module is in cache | ||
/******/ if(installedModules[moduleId]) | ||
/******/ return installedModules[moduleId].exports; | ||
/******/ | ||
/******/ // Create a new module (and put it into the cache) | ||
/******/ var module = installedModules[moduleId] = { | ||
/******/ exports: {}, | ||
/******/ id: moduleId, | ||
/******/ loaded: false | ||
/******/ i: moduleId, | ||
/******/ l: false, | ||
/******/ exports: {} | ||
/******/ }; | ||
/******/ | ||
/******/ // Execute the module function | ||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | ||
/******/ | ||
/******/ // Flag the module as loaded | ||
/******/ module.loaded = true; | ||
/******/ module.l = true; | ||
/******/ | ||
/******/ // Return the exports of the module | ||
/******/ return module.exports; | ||
/******/ } | ||
/******/ | ||
/******/ | ||
/******/ // expose the modules object (__webpack_modules__) | ||
/******/ __webpack_require__.m = modules; | ||
/******/ | ||
/******/ // expose the module cache | ||
/******/ __webpack_require__.c = installedModules; | ||
/******/ | ||
/******/ // identity function for calling harmony imports with the correct context | ||
/******/ __webpack_require__.i = function(value) { return value; }; | ||
/******/ | ||
/******/ // define getter function for harmony exports | ||
/******/ __webpack_require__.d = function(exports, name, getter) { | ||
/******/ if(!__webpack_require__.o(exports, name)) { | ||
/******/ Object.defineProperty(exports, name, { | ||
/******/ configurable: false, | ||
/******/ enumerable: true, | ||
/******/ get: getter | ||
/******/ }); | ||
/******/ } | ||
/******/ }; | ||
/******/ | ||
/******/ // getDefaultExport function for compatibility with non-harmony modules | ||
/******/ __webpack_require__.n = function(module) { | ||
/******/ var getter = module && module.__esModule ? | ||
/******/ function getDefault() { return module['default']; } : | ||
/******/ function getModuleExports() { return module; }; | ||
/******/ __webpack_require__.d(getter, 'a', getter); | ||
/******/ return getter; | ||
/******/ }; | ||
/******/ | ||
/******/ // Object.prototype.hasOwnProperty.call | ||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | ||
/******/ | ||
/******/ // __webpack_public_path__ | ||
/******/ __webpack_require__.p = ""; | ||
/******/ | ||
/******/ // Load entry module and return exports | ||
/******/ return __webpack_require__(0); | ||
/******/ return __webpack_require__(__webpack_require__.s = 6); | ||
/******/ }) | ||
@@ -56,417 +82,443 @@ /************************************************************************/ | ||
/* 0 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
/***/ (function(module, exports, __webpack_require__) { | ||
'use strict'; | ||
var utils = __webpack_require__(4); | ||
var handleRequest = __webpack_require__(1); | ||
function makeResponse(result, config) { | ||
return { | ||
status: result[0], | ||
data: result[1], | ||
headers: result[2], | ||
config: config | ||
}; | ||
} | ||
var VERBS = ['get', 'post', 'head', 'delete', 'patch', 'put']; | ||
function handleRequest(mockAdapter, resolve, reject, config) { | ||
if (config.baseURL && config.url.substr(0, config.baseURL.length) === config.baseURL) { | ||
config.url = config.url.slice(config.baseURL ? config.baseURL.length : 0); | ||
} | ||
config.adapter = null; | ||
function adapter() { | ||
return function(config) { | ||
var mockAdapter = this; | ||
// axios >= 0.13.0 only passes the config and expects a promise to be | ||
// returned. axios < 0.13.0 passes (config, resolve, reject). | ||
if (arguments.length === 3) { | ||
handleRequest(mockAdapter, arguments[0], arguments[1], arguments[2]); | ||
} else { | ||
return new Promise(function(resolve, reject) { | ||
handleRequest(mockAdapter, resolve, reject, config); | ||
}); | ||
} | ||
}.bind(this); | ||
} | ||
var handler = utils.findHandler(mockAdapter.handlers, config.method, config.url, config.data, config.params); | ||
function reset() { | ||
this.handlers = VERBS.reduce(function(accumulator, verb) { | ||
accumulator[verb] = []; | ||
return accumulator; | ||
}, {}); | ||
this.replyOnceHandlers = []; | ||
} | ||
if (handler) { | ||
utils.purgeIfReplyOnce(mockAdapter, handler); | ||
function MockAdapter(axiosInstance, options) { | ||
reset.call(this); | ||
if (handler.length === 2) { // passThrough handler | ||
// tell axios to use the original adapter instead of our mock, fixes #35 | ||
config.adapter = mockAdapter.originalAdapter; | ||
mockAdapter | ||
.axiosInstance | ||
.request(config) | ||
.then(resolve, reject); | ||
} else if (!(handler[2] instanceof Function)) { | ||
utils.settle(resolve, reject, makeResponse(handler.slice(2), config), mockAdapter.delayResponse); | ||
} else { | ||
var result = handler[2](config); | ||
// TODO throw a sane exception when return value is incorrect | ||
if (!(result.then instanceof Function)) { | ||
utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse); | ||
} else { | ||
result.then( | ||
function(result) { | ||
utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse); | ||
}, | ||
function(error) { | ||
if (mockAdapter.delayResponse > 0) { | ||
setTimeout(function() { | ||
reject(error); | ||
}, mockAdapter.delayResponse); | ||
} else { | ||
reject(error); | ||
} | ||
} | ||
); | ||
} | ||
} | ||
} else { // handler not found | ||
utils.settle(resolve, reject, { | ||
status: 404, | ||
config: config | ||
}, mockAdapter.delayResponse); | ||
} | ||
} | ||
if (axiosInstance) { | ||
this.axiosInstance = axiosInstance; | ||
this.originalAdapter = axiosInstance.defaults.adapter; | ||
this.delayResponse = options && options.delayResponse > 0 | ||
? options.delayResponse | ||
: null; | ||
axiosInstance.defaults.adapter = adapter.call(this); | ||
} | ||
} | ||
module.exports = handleRequest; | ||
MockAdapter.prototype.adapter = adapter; | ||
MockAdapter.prototype.restore = function restore() { | ||
if (this.axiosInstance) { | ||
this.axiosInstance.defaults.adapter = this.originalAdapter; | ||
} | ||
}; | ||
/***/ }), | ||
/* 1 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
MockAdapter.prototype.reset = reset; | ||
var pSlice = Array.prototype.slice; | ||
var objectKeys = __webpack_require__(3); | ||
var isArguments = __webpack_require__(2); | ||
VERBS.concat('any').forEach(function(method) { | ||
var methodName = 'on' + method.charAt(0).toUpperCase() + method.slice(1); | ||
MockAdapter.prototype[methodName] = function(matcher, body) { | ||
var _this = this; | ||
var matcher = matcher === undefined ? /.*/ : matcher; | ||
return { | ||
reply: function reply(code, response, headers) { | ||
var handler = [matcher, body, code, response, headers]; | ||
addHandler(method, _this.handlers, handler); | ||
return _this; | ||
}, | ||
var deepEqual = module.exports = function (actual, expected, opts) { | ||
if (!opts) opts = {}; | ||
// 7.1. All identical values are equivalent, as determined by ===. | ||
if (actual === expected) { | ||
return true; | ||
replyOnce: function replyOnce(code, response, headers) { | ||
var handler = [matcher, body, code, response, headers]; | ||
addHandler(method, _this.handlers, handler); | ||
_this.replyOnceHandlers.push(handler); | ||
return _this; | ||
}, | ||
} else if (actual instanceof Date && expected instanceof Date) { | ||
return actual.getTime() === expected.getTime(); | ||
passThrough: function passThrough() { | ||
var handler = [matcher, body]; | ||
addHandler(method, _this.handlers, handler); | ||
return _this; | ||
} | ||
}; | ||
}; | ||
}); | ||
// 7.3. Other pairs that do not both pass typeof value == 'object', | ||
// equivalence is determined by ==. | ||
} else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { | ||
return opts.strict ? actual === expected : actual == expected; | ||
function addHandler(method, handlers, handler) { | ||
if (method === 'any') { | ||
VERBS.forEach(function(verb) { | ||
handlers[verb].push(handler); | ||
}); | ||
} else { | ||
handlers[method].push(handler); | ||
} | ||
} | ||
// 7.4. For all other Object pairs, including Array objects, equivalence is | ||
// determined by having the same number of owned properties (as verified | ||
// with Object.prototype.hasOwnProperty.call), the same set of keys | ||
// (although not necessarily the same order), equivalent values for every | ||
// corresponding key, and an identical 'prototype' property. Note: this | ||
// accounts for both named and indexed properties on Arrays. | ||
} else { | ||
return objEquiv(actual, expected, opts); | ||
} | ||
} | ||
module.exports = MockAdapter; | ||
function isUndefinedOrNull(value) { | ||
return value === null || value === undefined; | ||
} | ||
function isBuffer (x) { | ||
if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; | ||
if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { | ||
return false; | ||
} | ||
if (x.length > 0 && typeof x[0] !== 'number') return false; | ||
return true; | ||
} | ||
/***/ }, | ||
/* 1 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
function objEquiv(a, b, opts) { | ||
var i, key; | ||
if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) | ||
return false; | ||
// an identical 'prototype' property. | ||
if (a.prototype !== b.prototype) return false; | ||
//~~~I've managed to break Object.keys through screwy arguments passing. | ||
// Converting to array solves the problem. | ||
if (isArguments(a)) { | ||
if (!isArguments(b)) { | ||
return false; | ||
} | ||
a = pSlice.call(a); | ||
b = pSlice.call(b); | ||
return deepEqual(a, b, opts); | ||
} | ||
if (isBuffer(a)) { | ||
if (!isBuffer(b)) { | ||
return false; | ||
} | ||
if (a.length !== b.length) return false; | ||
for (i = 0; i < a.length; i++) { | ||
if (a[i] !== b[i]) return false; | ||
} | ||
return true; | ||
} | ||
try { | ||
var ka = objectKeys(a), | ||
kb = objectKeys(b); | ||
} catch (e) {//happens when one is a string literal and the other isn't | ||
return false; | ||
} | ||
// having the same number of owned properties (keys incorporates | ||
// hasOwnProperty) | ||
if (ka.length != kb.length) | ||
return false; | ||
//the same set of keys (although not necessarily the same order), | ||
ka.sort(); | ||
kb.sort(); | ||
//~~~cheap key test | ||
for (i = ka.length - 1; i >= 0; i--) { | ||
if (ka[i] != kb[i]) | ||
return false; | ||
} | ||
//equivalent values for every corresponding key, and | ||
//~~~possibly expensive deep test | ||
for (i = ka.length - 1; i >= 0; i--) { | ||
key = ka[i]; | ||
if (!deepEqual(a[key], b[key], opts)) return false; | ||
} | ||
return typeof a === typeof b; | ||
} | ||
var utils = __webpack_require__(2); | ||
function makeResponse(result, config) { | ||
return { | ||
status: result[0], | ||
data: result[1], | ||
headers: result[2], | ||
config: config | ||
}; | ||
} | ||
/***/ }), | ||
/* 2 */ | ||
/***/ (function(module, exports) { | ||
function handleRequest(mockAdapter, resolve, reject, config) { | ||
if (config.baseURL && config.url.substr(0, config.baseURL.length) === config.baseURL) { | ||
config.url = config.url.slice(config.baseURL ? config.baseURL.length : 0); | ||
} | ||
config.adapter = null; | ||
var supportsArgumentsClass = (function(){ | ||
return Object.prototype.toString.call(arguments) | ||
})() == '[object Arguments]'; | ||
var handler = utils.findHandler(mockAdapter.handlers, config.method, config.url, config.data); | ||
exports = module.exports = supportsArgumentsClass ? supported : unsupported; | ||
if (handler) { | ||
utils.purgeIfReplyOnce(mockAdapter, handler); | ||
exports.supported = supported; | ||
function supported(object) { | ||
return Object.prototype.toString.call(object) == '[object Arguments]'; | ||
}; | ||
if (handler.length === 2) { // passThrough handler | ||
mockAdapter | ||
.axiosInstance | ||
.request(config) | ||
.then(resolve, reject); | ||
} else if (!(handler[2] instanceof Function)) { | ||
utils.settle(resolve, reject, makeResponse(handler.slice(2), config), mockAdapter.delayResponse); | ||
} else { | ||
var result = handler[2](config); | ||
// TODO throw a sane exception when return value is incorrect | ||
if (!(result.then instanceof Function)) { | ||
utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse); | ||
} else { | ||
result.then( | ||
function(result) { | ||
utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse); | ||
}, | ||
function(error) { | ||
if (mockAdapter.delayResponse > 0) { | ||
setTimeout(function() { | ||
reject(error); | ||
}, mockAdapter.delayResponse); | ||
} else { | ||
reject(error); | ||
} | ||
} | ||
); | ||
} | ||
} | ||
} else { // handler not found | ||
utils.settle(resolve, reject, { | ||
status: 404, | ||
config: config | ||
}, mockAdapter.delayResponse); | ||
} | ||
} | ||
exports.unsupported = unsupported; | ||
function unsupported(object){ | ||
return object && | ||
typeof object == 'object' && | ||
typeof object.length == 'number' && | ||
Object.prototype.hasOwnProperty.call(object, 'callee') && | ||
!Object.prototype.propertyIsEnumerable.call(object, 'callee') || | ||
false; | ||
}; | ||
module.exports = handleRequest; | ||
/***/ }), | ||
/* 3 */ | ||
/***/ (function(module, exports) { | ||
/***/ }, | ||
/* 2 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
exports = module.exports = typeof Object.keys === 'function' | ||
? Object.keys : shim; | ||
'use strict'; | ||
exports.shim = shim; | ||
function shim (obj) { | ||
var keys = []; | ||
for (var key in obj) keys.push(key); | ||
return keys; | ||
} | ||
var axios = __webpack_require__(3); | ||
var deepEqual = __webpack_require__(4); | ||
function isEqual(a, b) { | ||
return deepEqual(a, b, { strict: true }); | ||
} | ||
/***/ }), | ||
/* 4 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
// < 0.13.0 will not have default headers set on a custom instance | ||
var rejectWithError = !!axios.create().defaults.headers; | ||
"use strict"; | ||
function find(array, predicate) { | ||
var length = array.length; | ||
for (var i = 0; i < length; i++) { | ||
var value = array[i]; | ||
if (predicate(value)) return value; | ||
} | ||
} | ||
function findHandler(handlers, method, url, body) { | ||
return find(handlers[method.toLowerCase()], function(handler) { | ||
if (typeof handler[0] === 'string') { | ||
return url === handler[0] && isBodyMatching(body, handler[1]); | ||
} else if (handler[0] instanceof RegExp) { | ||
return handler[0].test(url) && isBodyMatching(body, handler[1]); | ||
} | ||
}); | ||
} | ||
var axios = __webpack_require__(5); | ||
var deepEqual = __webpack_require__(1); | ||
function isBodyMatching(body, requiredBody) { | ||
if (requiredBody === undefined) { | ||
return true; | ||
} | ||
var parsedBody; | ||
try { | ||
parsedBody = JSON.parse(body); | ||
} catch (e) { } | ||
return parsedBody ? isEqual(parsedBody, requiredBody) : isEqual(body, requiredBody); | ||
} | ||
function isEqual(a, b) { | ||
return deepEqual(a, b, { strict: true }); | ||
} | ||
function purgeIfReplyOnce(mock, handler) { | ||
var index = mock.replyOnceHandlers.indexOf(handler); | ||
if (index > -1) { | ||
mock.replyOnceHandlers.splice(index, 1); | ||
// < 0.13.0 will not have default headers set on a custom instance | ||
var rejectWithError = !!axios.create().defaults.headers; | ||
Object.keys(mock.handlers).forEach(function(key) { | ||
index = mock.handlers[key].indexOf(handler); | ||
if (index > -1) { | ||
mock.handlers[key].splice(index, 1); | ||
} | ||
}); | ||
} | ||
} | ||
function find(array, predicate) { | ||
var length = array.length; | ||
for (var i = 0; i < length; i++) { | ||
var value = array[i]; | ||
if (predicate(value)) return value; | ||
} | ||
} | ||
function settle(resolve, reject, response, delay) { | ||
if (delay > 0) { | ||
setTimeout(function() { | ||
settle(resolve, reject, response); | ||
}, delay); | ||
return; | ||
} | ||
function findHandler(handlers, method, url, body, parameters) { | ||
return find(handlers[method.toLowerCase()], function(handler) { | ||
if (typeof handler[0] === 'string') { | ||
return isUrlMatching(url, handler[0]) && isBodyOrParametersMatching(method, body, parameters, handler[1]); | ||
} else if (handler[0] instanceof RegExp) { | ||
return handler[0].test(url) && isBodyOrParametersMatching(method, body, parameters, handler[1]); | ||
} | ||
}); | ||
} | ||
if (response.config && response.config.validateStatus) { | ||
response.config.validateStatus(response.status) | ||
? resolve(response) | ||
: reject(createErrorResponse( | ||
'Request failed with status code ' + response.status, | ||
response.config, | ||
response | ||
)); | ||
return; | ||
} | ||
function isUrlMatching(url, required) { | ||
var noSlashUrl = url[0] === '/' ? url.substr(1) : url; | ||
var noSlashRequired = required[0] === '/' ? required.substr(1) : required; | ||
return (noSlashUrl === noSlashRequired); | ||
} | ||
// Support for axios < 0.11 | ||
if (response.status >= 200 && response.status < 300) { | ||
resolve(response); | ||
} else { | ||
reject(response); | ||
} | ||
} | ||
function isBodyOrParametersMatching(method, body, parameters, required) { | ||
if (method.toLowerCase() === 'get') { | ||
var params = required ? required.params : undefined; | ||
return isParametersMatching(parameters, params); | ||
} else { | ||
return isBodyMatching(body, required); | ||
} | ||
} | ||
function createErrorResponse(message, config, response) { | ||
// Support for axios < 0.13.0 | ||
if (!rejectWithError) return response; | ||
function isParametersMatching(parameters, required) { | ||
if (required === undefined && parameters === undefined) { | ||
return true; | ||
} | ||
var error = new Error(message); | ||
error.config = config; | ||
error.response = response; | ||
return error; | ||
} | ||
return isEqual(parameters, required); | ||
} | ||
module.exports = { | ||
find: find, | ||
findHandler: findHandler, | ||
purgeIfReplyOnce: purgeIfReplyOnce, | ||
settle: settle | ||
}; | ||
function isBodyMatching(body, requiredBody) { | ||
if (requiredBody === undefined) { | ||
return true; | ||
} | ||
var parsedBody; | ||
try { | ||
parsedBody = JSON.parse(body); | ||
} catch (e) { } | ||
return parsedBody ? isEqual(parsedBody, requiredBody) : isEqual(body, requiredBody); | ||
} | ||
function purgeIfReplyOnce(mock, handler) { | ||
var index = mock.replyOnceHandlers.indexOf(handler); | ||
if (index > -1) { | ||
mock.replyOnceHandlers.splice(index, 1); | ||
/***/ }, | ||
/* 3 */ | ||
/***/ function(module, exports) { | ||
Object.keys(mock.handlers).forEach(function(key) { | ||
index = mock.handlers[key].indexOf(handler); | ||
if (index > -1) { | ||
mock.handlers[key].splice(index, 1); | ||
} | ||
}); | ||
} | ||
} | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_3__; | ||
function settle(resolve, reject, response, delay) { | ||
if (delay > 0) { | ||
setTimeout(function() { | ||
settle(resolve, reject, response); | ||
}, delay); | ||
return; | ||
} | ||
/***/ }, | ||
/* 4 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
if (response.config && response.config.validateStatus) { | ||
response.config.validateStatus(response.status) | ||
? resolve(response) | ||
: reject(createErrorResponse( | ||
'Request failed with status code ' + response.status, | ||
response.config, | ||
response | ||
)); | ||
return; | ||
} | ||
var pSlice = Array.prototype.slice; | ||
var objectKeys = __webpack_require__(5); | ||
var isArguments = __webpack_require__(6); | ||
// Support for axios < 0.11 | ||
if (response.status >= 200 && response.status < 300) { | ||
resolve(response); | ||
} else { | ||
reject(response); | ||
} | ||
} | ||
var deepEqual = module.exports = function (actual, expected, opts) { | ||
if (!opts) opts = {}; | ||
// 7.1. All identical values are equivalent, as determined by ===. | ||
if (actual === expected) { | ||
return true; | ||
function createErrorResponse(message, config, response) { | ||
// Support for axios < 0.13.0 | ||
if (!rejectWithError) return response; | ||
} else if (actual instanceof Date && expected instanceof Date) { | ||
return actual.getTime() === expected.getTime(); | ||
var error = new Error(message); | ||
error.config = config; | ||
error.response = response; | ||
return error; | ||
} | ||
// 7.3. Other pairs that do not both pass typeof value == 'object', | ||
// equivalence is determined by ==. | ||
} else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { | ||
return opts.strict ? actual === expected : actual == expected; | ||
module.exports = { | ||
find: find, | ||
findHandler: findHandler, | ||
purgeIfReplyOnce: purgeIfReplyOnce, | ||
settle: settle | ||
}; | ||
// 7.4. For all other Object pairs, including Array objects, equivalence is | ||
// determined by having the same number of owned properties (as verified | ||
// with Object.prototype.hasOwnProperty.call), the same set of keys | ||
// (although not necessarily the same order), equivalent values for every | ||
// corresponding key, and an identical 'prototype' property. Note: this | ||
// accounts for both named and indexed properties on Arrays. | ||
} else { | ||
return objEquiv(actual, expected, opts); | ||
} | ||
} | ||
function isUndefinedOrNull(value) { | ||
return value === null || value === undefined; | ||
} | ||
/***/ }), | ||
/* 5 */ | ||
/***/ (function(module, exports) { | ||
function isBuffer (x) { | ||
if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; | ||
if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { | ||
return false; | ||
} | ||
if (x.length > 0 && typeof x[0] !== 'number') return false; | ||
return true; | ||
} | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_5__; | ||
function objEquiv(a, b, opts) { | ||
var i, key; | ||
if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) | ||
return false; | ||
// an identical 'prototype' property. | ||
if (a.prototype !== b.prototype) return false; | ||
//~~~I've managed to break Object.keys through screwy arguments passing. | ||
// Converting to array solves the problem. | ||
if (isArguments(a)) { | ||
if (!isArguments(b)) { | ||
return false; | ||
} | ||
a = pSlice.call(a); | ||
b = pSlice.call(b); | ||
return deepEqual(a, b, opts); | ||
} | ||
if (isBuffer(a)) { | ||
if (!isBuffer(b)) { | ||
return false; | ||
} | ||
if (a.length !== b.length) return false; | ||
for (i = 0; i < a.length; i++) { | ||
if (a[i] !== b[i]) return false; | ||
} | ||
return true; | ||
} | ||
try { | ||
var ka = objectKeys(a), | ||
kb = objectKeys(b); | ||
} catch (e) {//happens when one is a string literal and the other isn't | ||
return false; | ||
} | ||
// having the same number of owned properties (keys incorporates | ||
// hasOwnProperty) | ||
if (ka.length != kb.length) | ||
return false; | ||
//the same set of keys (although not necessarily the same order), | ||
ka.sort(); | ||
kb.sort(); | ||
//~~~cheap key test | ||
for (i = ka.length - 1; i >= 0; i--) { | ||
if (ka[i] != kb[i]) | ||
return false; | ||
} | ||
//equivalent values for every corresponding key, and | ||
//~~~possibly expensive deep test | ||
for (i = ka.length - 1; i >= 0; i--) { | ||
key = ka[i]; | ||
if (!deepEqual(a[key], b[key], opts)) return false; | ||
} | ||
return typeof a === typeof b; | ||
} | ||
/***/ }), | ||
/* 6 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
/***/ }, | ||
/* 5 */ | ||
/***/ function(module, exports) { | ||
exports = module.exports = typeof Object.keys === 'function' | ||
? Object.keys : shim; | ||
var handleRequest = __webpack_require__(0); | ||
exports.shim = shim; | ||
function shim (obj) { | ||
var keys = []; | ||
for (var key in obj) keys.push(key); | ||
return keys; | ||
} | ||
var VERBS = ['get', 'post', 'head', 'delete', 'patch', 'put']; | ||
function adapter() { | ||
return function(config) { | ||
var mockAdapter = this; | ||
// axios >= 0.13.0 only passes the config and expects a promise to be | ||
// returned. axios < 0.13.0 passes (config, resolve, reject). | ||
if (arguments.length === 3) { | ||
handleRequest(mockAdapter, arguments[0], arguments[1], arguments[2]); | ||
} else { | ||
return new Promise(function(resolve, reject) { | ||
handleRequest(mockAdapter, resolve, reject, config); | ||
}); | ||
} | ||
}.bind(this); | ||
} | ||
/***/ }, | ||
/* 6 */ | ||
/***/ function(module, exports) { | ||
function reset() { | ||
this.handlers = VERBS.reduce(function(accumulator, verb) { | ||
accumulator[verb] = []; | ||
return accumulator; | ||
}, {}); | ||
this.replyOnceHandlers = []; | ||
} | ||
var supportsArgumentsClass = (function(){ | ||
return Object.prototype.toString.call(arguments) | ||
})() == '[object Arguments]'; | ||
function MockAdapter(axiosInstance, options) { | ||
reset.call(this); | ||
exports = module.exports = supportsArgumentsClass ? supported : unsupported; | ||
if (axiosInstance) { | ||
this.axiosInstance = axiosInstance; | ||
this.originalAdapter = axiosInstance.defaults.adapter; | ||
this.delayResponse = options && options.delayResponse > 0 | ||
? options.delayResponse | ||
: null; | ||
axiosInstance.defaults.adapter = adapter.call(this); | ||
} | ||
} | ||
exports.supported = supported; | ||
function supported(object) { | ||
return Object.prototype.toString.call(object) == '[object Arguments]'; | ||
}; | ||
MockAdapter.prototype.adapter = adapter; | ||
exports.unsupported = unsupported; | ||
function unsupported(object){ | ||
return object && | ||
typeof object == 'object' && | ||
typeof object.length == 'number' && | ||
Object.prototype.hasOwnProperty.call(object, 'callee') && | ||
!Object.prototype.propertyIsEnumerable.call(object, 'callee') || | ||
false; | ||
}; | ||
MockAdapter.prototype.restore = function restore() { | ||
if (this.axiosInstance) { | ||
this.axiosInstance.defaults.adapter = this.originalAdapter; | ||
} | ||
}; | ||
MockAdapter.prototype.reset = reset; | ||
/***/ } | ||
/******/ ]) | ||
VERBS.concat('any').forEach(function(method) { | ||
var methodName = 'on' + method.charAt(0).toUpperCase() + method.slice(1); | ||
MockAdapter.prototype[methodName] = function(matcher, body) { | ||
var _this = this; | ||
var matcher = matcher === undefined ? /.*/ : matcher; | ||
return { | ||
reply: function reply(code, response, headers) { | ||
var handler = [matcher, body, code, response, headers]; | ||
addHandler(method, _this.handlers, handler); | ||
return _this; | ||
}, | ||
replyOnce: function replyOnce(code, response, headers) { | ||
var handler = [matcher, body, code, response, headers]; | ||
addHandler(method, _this.handlers, handler); | ||
_this.replyOnceHandlers.push(handler); | ||
return _this; | ||
}, | ||
passThrough: function passThrough() { | ||
var handler = [matcher, body]; | ||
addHandler(method, _this.handlers, handler); | ||
return _this; | ||
} | ||
}; | ||
}; | ||
}); | ||
; | ||
function addHandler(method, handlers, handler) { | ||
if (method === 'any') { | ||
VERBS.forEach(function(verb) { | ||
handlers[verb].push(handler); | ||
}); | ||
} else { | ||
handlers[method].push(handler); | ||
} | ||
} | ||
module.exports = MockAdapter; | ||
/***/ }) | ||
/******/ ]); | ||
}); |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("axios")):"function"==typeof define&&define.amd?define(["axios"],t):"object"==typeof exports?exports.AxiosMockAdapter=t(require("axios")):e.AxiosMockAdapter=t(e.axios)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(){return function(e){var t=this;return 3!==arguments.length?new Promise(function(n,r){a(t,n,r,e)}):void a(t,arguments[0],arguments[1],arguments[2])}.bind(this)}function o(){this.handlers=u.reduce(function(e,t){return e[t]=[],e},{}),this.replyOnceHandlers=[]}function s(e,t){o.call(this),e&&(this.axiosInstance=e,this.originalAdapter=e.defaults.adapter,this.delayResponse=t&&t.delayResponse>0?t.delayResponse:null,e.defaults.adapter=r.call(this))}function i(e,t,n){"any"===e?u.forEach(function(e){t[e].push(n)}):t[e].push(n)}var a=n(1),u=["get","post","head","delete","patch","put"];s.prototype.adapter=r,s.prototype.restore=function(){this.axiosInstance&&(this.axiosInstance.defaults.adapter=this.originalAdapter)},s.prototype.reset=o,u.concat("any").forEach(function(e){var t="on"+e.charAt(0).toUpperCase()+e.slice(1);s.prototype[t]=function(t,n){var r=this,t=void 0===t?/.*/:t;return{reply:function(o,s,a){var u=[t,n,o,s,a];return i(e,r.handlers,u),r},replyOnce:function(o,s,a){var u=[t,n,o,s,a];return i(e,r.handlers,u),r.replyOnceHandlers.push(u),r},passThrough:function(){var o=[t,n];return i(e,r.handlers,o),r}}}}),e.exports=s},function(e,t,n){function r(e,t){return{status:e[0],data:e[1],headers:e[2],config:t}}function o(e,t,n,o){o.baseURL&&o.url.substr(0,o.baseURL.length)===o.baseURL&&(o.url=o.url.slice(o.baseURL?o.baseURL.length:0)),o.adapter=null;var i=s.findHandler(e.handlers,o.method,o.url,o.data);if(i)if(s.purgeIfReplyOnce(e,i),2===i.length)e.axiosInstance.request(o).then(t,n);else if(i[2]instanceof Function){var a=i[2](o);a.then instanceof Function?a.then(function(i){s.settle(t,n,r(i,o),e.delayResponse)},function(t){e.delayResponse>0?setTimeout(function(){n(t)},e.delayResponse):n(t)}):s.settle(t,n,r(a,o),e.delayResponse)}else s.settle(t,n,r(i.slice(2),o),e.delayResponse);else s.settle(t,n,{status:404,config:o},e.delayResponse)}var s=n(2);e.exports=o},function(e,t,n){"use strict";function r(e,t){return l(e,t,{strict:!0})}function o(e,t){for(var n=e.length,r=0;r<n;r++){var o=e[r];if(t(o))return o}}function s(e,t,n,r){return o(e[t.toLowerCase()],function(e){return"string"==typeof e[0]?n===e[0]&&i(r,e[1]):e[0]instanceof RegExp?e[0].test(n)&&i(r,e[1]):void 0})}function i(e,t){if(void 0===t)return!0;var n;try{n=JSON.parse(e)}catch(o){}return n?r(n,t):r(e,t)}function a(e,t){var n=e.replyOnceHandlers.indexOf(t);n>-1&&(e.replyOnceHandlers.splice(n,1),Object.keys(e.handlers).forEach(function(r){n=e.handlers[r].indexOf(t),n>-1&&e.handlers[r].splice(n,1)}))}function u(e,t,n,r){return r>0?void setTimeout(function(){u(e,t,n)},r):n.config&&n.config.validateStatus?void(n.config.validateStatus(n.status)?e(n):t(c("Request failed with status code "+n.status,n.config,n))):void(n.status>=200&&n.status<300?e(n):t(n))}function c(e,t,n){if(!p)return n;var r=new Error(e);return r.config=t,r.response=n,r}var f=n(3),l=n(4),p=!!f.create().defaults.headers;e.exports={find:o,findHandler:s,purgeIfReplyOnce:a,settle:u}},function(t,n){t.exports=e},function(e,t,n){function r(e){return null===e||void 0===e}function o(e){return!(!e||"object"!=typeof e||"number"!=typeof e.length)&&("function"==typeof e.copy&&"function"==typeof e.slice&&!(e.length>0&&"number"!=typeof e[0]))}function s(e,t,n){var s,f;if(r(e)||r(t))return!1;if(e.prototype!==t.prototype)return!1;if(u(e))return!!u(t)&&(e=i.call(e),t=i.call(t),c(e,t,n));if(o(e)){if(!o(t))return!1;if(e.length!==t.length)return!1;for(s=0;s<e.length;s++)if(e[s]!==t[s])return!1;return!0}try{var l=a(e),p=a(t)}catch(d){return!1}if(l.length!=p.length)return!1;for(l.sort(),p.sort(),s=l.length-1;s>=0;s--)if(l[s]!=p[s])return!1;for(s=l.length-1;s>=0;s--)if(f=l[s],!c(e[f],t[f],n))return!1;return typeof e==typeof t}var i=Array.prototype.slice,a=n(5),u=n(6),c=e.exports=function(e,t,n){return n||(n={}),e===t||(e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:s(e,t,n))}},function(e,t){function n(e){var t=[];for(var n in e)t.push(n);return t}t=e.exports="function"==typeof Object.keys?Object.keys:n,t.shim=n},function(e,t){function n(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();t=e.exports=o?n:r,t.supported=n,t.unsupported=r}])}); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("axios")):"function"==typeof define&&define.amd?define(["axios"],t):"object"==typeof exports?exports.AxiosMockAdapter=t(require("axios")):e.AxiosMockAdapter=t(e.axios)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){function r(e,t){return{status:e[0],data:e[1],headers:e[2],config:t}}function o(e,t,n,o){o.baseURL&&o.url.substr(0,o.baseURL.length)===o.baseURL&&(o.url=o.url.slice(o.baseURL?o.baseURL.length:0)),o.adapter=null;var s=i.findHandler(e.handlers,o.method,o.url,o.data,o.params);if(s)if(i.purgeIfReplyOnce(e,s),2===s.length)o.adapter=e.originalAdapter,e.axiosInstance.request(o).then(t,n);else if(s[2]instanceof Function){var u=s[2](o);u.then instanceof Function?u.then(function(s){i.settle(t,n,r(s,o),e.delayResponse)},function(t){e.delayResponse>0?setTimeout(function(){n(t)},e.delayResponse):n(t)}):i.settle(t,n,r(u,o),e.delayResponse)}else i.settle(t,n,r(s.slice(2),o),e.delayResponse);else i.settle(t,n,{status:404,config:o},e.delayResponse)}var i=n(4);e.exports=o},function(e,t,n){function r(e){return null===e||void 0===e}function o(e){return!(!e||"object"!=typeof e||"number"!=typeof e.length)&&("function"==typeof e.copy&&"function"==typeof e.slice&&!(e.length>0&&"number"!=typeof e[0]))}function i(e,t,n){var i,f;if(r(e)||r(t))return!1;if(e.prototype!==t.prototype)return!1;if(a(e))return!!a(t)&&(e=s.call(e),t=s.call(t),c(e,t,n));if(o(e)){if(!o(t))return!1;if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}try{var l=u(e),p=u(t)}catch(e){return!1}if(l.length!=p.length)return!1;for(l.sort(),p.sort(),i=l.length-1;i>=0;i--)if(l[i]!=p[i])return!1;for(i=l.length-1;i>=0;i--)if(f=l[i],!c(e[f],t[f],n))return!1;return typeof e==typeof t}var s=Array.prototype.slice,u=n(3),a=n(2),c=e.exports=function(e,t,n){return n||(n={}),e===t||(e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:i(e,t,n))}},function(e,t){function n(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();t=e.exports=o?n:r,t.supported=n,t.unsupported=r},function(e,t){function n(e){var t=[];for(var n in e)t.push(n);return t}t=e.exports="function"==typeof Object.keys?Object.keys:n,t.shim=n},function(e,t,n){"use strict";function r(e,t){return h(e,t,{strict:!0})}function o(e,t){for(var n=e.length,r=0;r<n;r++){var o=e[r];if(t(o))return o}}function i(e,t,n,r,i){return o(e[t.toLowerCase()],function(e){return"string"==typeof e[0]?s(n,e[0])&&u(t,r,i,e[1]):e[0]instanceof RegExp?e[0].test(n)&&u(t,r,i,e[1]):void 0})}function s(e,t){var n="/"===e[0]?e.substr(1):e,r="/"===t[0]?t.substr(1):t;return n===r}function u(e,t,n,r){if("get"===e.toLowerCase()){var o=r?r.params:void 0;return a(n,o)}return c(t,r)}function a(e,t){return void 0===t&&void 0===e||r(e,t)}function c(e,t){if(void 0===t)return!0;var n;try{n=JSON.parse(e)}catch(e){}return n?r(n,t):r(e,t)}function f(e,t){var n=e.replyOnceHandlers.indexOf(t);n>-1&&(e.replyOnceHandlers.splice(n,1),Object.keys(e.handlers).forEach(function(r){n=e.handlers[r].indexOf(t),n>-1&&e.handlers[r].splice(n,1)}))}function l(e,t,n,r){return r>0?void setTimeout(function(){l(e,t,n)},r):n.config&&n.config.validateStatus?void(n.config.validateStatus(n.status)?e(n):t(p("Request failed with status code "+n.status,n.config,n))):void(n.status>=200&&n.status<300?e(n):t(n))}function p(e,t,n){if(!y)return n;var r=new Error(e);return r.config=t,r.response=n,r}var d=n(5),h=n(1),y=!!d.create().defaults.headers;e.exports={find:o,findHandler:i,purgeIfReplyOnce:f,settle:l}},function(t,n){t.exports=e},function(e,t,n){"use strict";function r(){return function(e){var t=this;return 3!==arguments.length?new Promise(function(n,r){u(t,n,r,e)}):void u(t,arguments[0],arguments[1],arguments[2])}.bind(this)}function o(){this.handlers=a.reduce(function(e,t){return e[t]=[],e},{}),this.replyOnceHandlers=[]}function i(e,t){o.call(this),e&&(this.axiosInstance=e,this.originalAdapter=e.defaults.adapter,this.delayResponse=t&&t.delayResponse>0?t.delayResponse:null,e.defaults.adapter=r.call(this))}function s(e,t,n){"any"===e?a.forEach(function(e){t[e].push(n)}):t[e].push(n)}var u=n(0),a=["get","post","head","delete","patch","put"];i.prototype.adapter=r,i.prototype.restore=function(){this.axiosInstance&&(this.axiosInstance.defaults.adapter=this.originalAdapter)},i.prototype.reset=o,a.concat("any").forEach(function(e){var t="on"+e.charAt(0).toUpperCase()+e.slice(1);i.prototype[t]=function(t,n){var r=this,t=void 0===t?/.*/:t;return{reply:function(o,i,u){var a=[t,n,o,i,u];return s(e,r.handlers,a),r},replyOnce:function(o,i,u){var a=[t,n,o,i,u];return s(e,r.handlers,a),r.replyOnceHandlers.push(a),r},passThrough:function(){var o=[t,n];return s(e,r.handlers,o),r}}}}),e.exports=i}])}); |
{ | ||
"name": "axios-mock-adapter", | ||
"version": "1.7.1", | ||
"version": "1.8.0", | ||
"description": "Axios adapter that allows to easily mock requests", | ||
@@ -43,8 +43,8 @@ "main": "src/index.js", | ||
"chai": "^3.5.0", | ||
"cross-env": "^3.1.3", | ||
"eslint": "^3.8.1", | ||
"cross-env": "^3.2.3", | ||
"eslint": "^3.17.1", | ||
"istanbul": "^0.4.5", | ||
"mocha": "^3.1.2", | ||
"rimraf": "^2.5.2", | ||
"webpack": "^1.13.2" | ||
"rimraf": "^2.6.1", | ||
"webpack": "^2.2.1" | ||
}, | ||
@@ -51,0 +51,0 @@ "dependencies": { |
@@ -46,2 +46,25 @@ # axios-mock-adapter | ||
Mocking a `GET` request with specific parameters | ||
```js | ||
var axios = require('axios'); | ||
var MockAdapter = require('axios-mock-adapter'); | ||
// This sets the mock adapter on the default instance | ||
var mock = new MockAdapter(axios); | ||
// Mock any GET request to /users | ||
// arguments for reply are (status, data, headers) | ||
mock.onGet('/users', { params: { searchText: 'John' } }).reply(200, { | ||
users: [ | ||
{ id: 1, name: 'John Smith' } | ||
] | ||
}); | ||
axios.get('/users', { params: { searchText: 'John' } } ) | ||
.then(function(response) { | ||
console.log(response.data); | ||
}); | ||
``` | ||
To add a delay to responses, specify a delay amount (in milliseconds) when instantiating the adapter | ||
@@ -48,0 +71,0 @@ |
@@ -18,3 +18,3 @@ var utils = require('./utils'); | ||
var handler = utils.findHandler(mockAdapter.handlers, config.method, config.url, config.data); | ||
var handler = utils.findHandler(mockAdapter.handlers, config.method, config.url, config.data, config.params); | ||
@@ -25,2 +25,4 @@ if (handler) { | ||
if (handler.length === 2) { // passThrough handler | ||
// tell axios to use the original adapter instead of our mock, fixes #35 | ||
config.adapter = mockAdapter.originalAdapter; | ||
mockAdapter | ||
@@ -27,0 +29,0 @@ .axiosInstance |
@@ -21,8 +21,8 @@ 'use strict'; | ||
function findHandler(handlers, method, url, body) { | ||
function findHandler(handlers, method, url, body, parameters) { | ||
return find(handlers[method.toLowerCase()], function(handler) { | ||
if (typeof handler[0] === 'string') { | ||
return url === handler[0] && isBodyMatching(body, handler[1]); | ||
return isUrlMatching(url, handler[0]) && isBodyOrParametersMatching(method, body, parameters, handler[1]); | ||
} else if (handler[0] instanceof RegExp) { | ||
return handler[0].test(url) && isBodyMatching(body, handler[1]); | ||
return handler[0].test(url) && isBodyOrParametersMatching(method, body, parameters, handler[1]); | ||
} | ||
@@ -32,2 +32,25 @@ }); | ||
function isUrlMatching(url, required) { | ||
var noSlashUrl = url[0] === '/' ? url.substr(1) : url; | ||
var noSlashRequired = required[0] === '/' ? required.substr(1) : required; | ||
return (noSlashUrl === noSlashRequired); | ||
} | ||
function isBodyOrParametersMatching(method, body, parameters, required) { | ||
if (method.toLowerCase() === 'get') { | ||
var params = required ? required.params : undefined; | ||
return isParametersMatching(parameters, params); | ||
} else { | ||
return isBodyMatching(body, required); | ||
} | ||
} | ||
function isParametersMatching(parameters, required) { | ||
if (required === undefined && parameters === undefined) { | ||
return true; | ||
} | ||
return isEqual(parameters, required); | ||
} | ||
function isBodyMatching(body, requiredBody) { | ||
@@ -34,0 +57,0 @@ if (requiredBody === undefined) { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
37346
686
247