@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
JavaScript
;
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