UNPKG

@4c/fetch-mock

Version:

Mock http requests made using fetch (or isomorphic-fetch)

181 lines (135 loc) 6 kB
"use strict"; 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;