@4c/fetch-mock
Version:
Mock http requests made using fetch (or isomorphic-fetch)
62 lines (46 loc) • 1.59 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _repeat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/repeat"));
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
var generateMatcher = require('./generate-matcher');
var sanitizeRoute = function sanitizeRoute(route) {
route = (0, _assign["default"])({}, route);
if (route.method) {
route.method = route.method.toLowerCase();
}
route.identifier = route.name || route.matcher;
return route;
};
var validateRoute = function validateRoute(route) {
if (!('response' in route)) {
throw new Error('fetch-mock: Each route must define a response');
}
if (!route.matcher) {
throw new Error('fetch-mock: Each route must specify a string, regex or function to match calls to fetch');
}
};
var limitMatcher = function limitMatcher(route) {
if (!(0, _repeat["default"])(route)) {
return;
}
var matcher = route.matcher;
var timesLeft = (0, _repeat["default"])(route);
route.matcher = function (url, options) {
var match = timesLeft && matcher(url, options);
if (match) {
timesLeft--;
return true;
}
};
route.reset = function () {
return timesLeft = (0, _repeat["default"])(route);
};
};
module.exports = function (route) {
validateRoute(route);
route = sanitizeRoute(route);
route.matcher = generateMatcher(route);
limitMatcher(route);
return route;
};
module.exports.sanitizeRoute = sanitizeRoute;