@4c/fetch-mock
Version:
Mock http requests made using fetch (or isomorphic-fetch)
181 lines (135 loc) • 6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
var _repeat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/repeat"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _every = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/every"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
var _require = require('./request-utils'),
normalizeUrl = _require.normalizeUrl;
var FetchMock = {};
var _require2 = require('./compile-route'),
sanitizeRoute = _require2.sanitizeRoute;
var generateMatcher = require('./generate-matcher');
var isName = function isName(nameOrMatcher) {
return typeof nameOrMatcher === 'string' && /^[\da-zA-Z\-]+$/.test(nameOrMatcher);
};
var filterCallsWithMatcher = function filterCallsWithMatcher(matcher) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var calls = arguments.length > 2 ? arguments[2] : undefined;
matcher = generateMatcher(sanitizeRoute((0, _assign["default"])({
matcher: matcher
}, options)));
return (0, _filter["default"])(calls).call(calls, function (_ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
url = _ref2[0],
options = _ref2[1];
return matcher(normalizeUrl(url), options);
});
};
FetchMock.filterCalls = function (nameOrMatcher, options) {
var calls = this._calls;
var matcher = '*';
if (nameOrMatcher === true) {
calls = (0, _filter["default"])(calls).call(calls, function (_ref3) {
var isUnmatched = _ref3.isUnmatched;
return !isUnmatched;
});
} else if (nameOrMatcher === false) {
calls = (0, _filter["default"])(calls).call(calls, function (_ref4) {
var isUnmatched = _ref4.isUnmatched;
return isUnmatched;
});
} else if (typeof nameOrMatcher === 'undefined') {
calls = calls;
} else if (isName(nameOrMatcher)) {
calls = (0, _filter["default"])(calls).call(calls, function (_ref5) {
var identifier = _ref5.identifier;
return identifier === nameOrMatcher;
});
} else {
var _context;
matcher = normalizeUrl(nameOrMatcher);
if ((0, _some["default"])(_context = this.routes).call(_context, function (_ref6) {
var identifier = _ref6.identifier;
return identifier === matcher;
})) {
calls = (0, _filter["default"])(calls).call(calls, function (call) {
return call.identifier === matcher;
});
}
}
if ((options || matcher !== '*') && calls.length) {
if (typeof options === 'string') {
options = {
method: options
};
}
calls = filterCallsWithMatcher(matcher, options, calls);
}
return calls;
};
FetchMock.calls = function (nameOrMatcher, options) {
return this.filterCalls(nameOrMatcher, options);
};
FetchMock.lastCall = function (nameOrMatcher, options) {
return (0, _toConsumableArray2["default"])(this.filterCalls(nameOrMatcher, options)).pop();
};
FetchMock.lastUrl = function (nameOrMatcher, options) {
return (this.lastCall(nameOrMatcher, options) || [])[0];
};
FetchMock.lastOptions = function (nameOrMatcher, options) {
return (this.lastCall(nameOrMatcher, options) || [])[1];
};
FetchMock.called = function (nameOrMatcher, options) {
return !!this.filterCalls(nameOrMatcher, options).length;
};
FetchMock.flush = function (waitForResponseMethods) {
var _this = this;
var queuedPromises = this._holdingPromises;
this._holdingPromises = [];
return _promise["default"].all(queuedPromises).then(function () {
if (waitForResponseMethods && _this._holdingPromises.length) {
return _this.flush(waitForResponseMethods);
}
});
};
FetchMock.done = function (nameOrMatcher) {
var _context2,
_this2 = this;
var routesToCheck = nameOrMatcher && typeof nameOrMatcher !== 'boolean' ? [{
identifier: nameOrMatcher
}] : this.routes; // Can't use array.every because would exit after first failure, which would
// break the logging
return (0, _every["default"])(_context2 = (0, _map["default"])(routesToCheck).call(routesToCheck, function (_ref7) {
var _context3;
var identifier = _ref7.identifier;
if (!_this2.called(identifier)) {
console.warn("Warning: ".concat(identifier, " not called")); // eslint-disable-line
return false;
}
var expectedTimes = (0, _repeat["default"])((0, _find["default"])(_context3 = _this2.routes).call(_context3, function (r) {
return r.identifier === identifier;
}) || {});
if (!expectedTimes) {
return true;
}
var actualTimes = _this2.filterCalls(identifier).length;
if (expectedTimes > actualTimes) {
var _context4, _context5;
console.warn((0, _concat["default"])(_context4 = (0, _concat["default"])(_context5 = "Warning: ".concat(identifier, " only called ")).call(_context5, actualTimes, " times, but ")).call(_context4, expectedTimes, " expected")); // eslint-disable-line
return false;
} else {
return true;
}
})).call(_context2, function (isDone) {
return isDone;
});
};
module.exports = FetchMock;