UNPKG

@hirez_io/auto-spies-core

Version:

Create automatic spies from classes in tests, also for promises and observables, used as a common code for jasmine-auto-spies and jest-auto-spies

91 lines 3.63 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAutoSpyFromClass = void 0; var _1 = require("."); function createAutoSpyFromClass(ObjectClass, createFunctionSpy, accessorSpyFactory, methodsToSpyOnOrConfig) { var proto = ObjectClass.prototype; var methodNames = getAllMethodNames(proto); var methodsToSpyOn = []; var observablePropsToSpyOn = []; var settersToSpyOn = []; var gettersToSpyOn = []; if (methodsToSpyOnOrConfig) { if (Array.isArray(methodsToSpyOnOrConfig)) { methodsToSpyOn = methodsToSpyOnOrConfig; } else { methodsToSpyOn = methodsToSpyOnOrConfig.methodsToSpyOn || []; observablePropsToSpyOn = methodsToSpyOnOrConfig.observablePropsToSpyOn || []; settersToSpyOn = methodsToSpyOnOrConfig.settersToSpyOn || []; gettersToSpyOn = methodsToSpyOnOrConfig.gettersToSpyOn || []; /* istanbul ignore if */ if (methodsToSpyOnOrConfig.providedMethodNames) { console.warn('"providedMethodNames" is deprecated, please use "methodsToSpyOn" instead'); methodsToSpyOn = __spreadArray(__spreadArray([], __read(methodsToSpyOn), false), __read(methodsToSpyOnOrConfig.providedMethodNames), false); } } } if (methodsToSpyOn.length > 0) { methodNames.push.apply(methodNames, __spreadArray([], __read(methodsToSpyOn), false)); } var autoSpy = {}; if (observablePropsToSpyOn.length > 0) { observablePropsToSpyOn.forEach(function (observablePropName) { autoSpy[observablePropName] = (0, _1.createObservablePropSpy)(); }); } (0, _1.createAccessorsSpies)(autoSpy, gettersToSpyOn, settersToSpyOn, accessorSpyFactory); methodNames.forEach(function (methodName) { autoSpy[methodName] = createFunctionSpy(methodName); }); return autoSpy; } exports.createAutoSpyFromClass = createAutoSpyFromClass; function getAllMethodNames(obj) { var methods = []; while (obj) { var parentObj = Object.getPrototypeOf(obj); // we don't want to spy on Function.prototype methods if (parentObj) { methods = methods.concat(extractMethodsFromObject(obj)); } obj = parentObj; } return methods; } function extractMethodsFromObject(obj) { var propertyDescriptors = Object.getOwnPropertyDescriptors(obj); return Object.keys(propertyDescriptors).reduce(function (names, name) { var descriptor = propertyDescriptors[name]; if (name !== 'constructor' && !descriptor.get) { names.push(name); } return names; }, []); } //# sourceMappingURL=create-auto-spy-from-class.js.map