UNPKG

@hexancore/mocker

Version:

Simple and magical mocks for TypeScript, works with jest and vitest

66 lines (65 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mocks = exports.Mockers = void 0; const Mocker_1 = require("./Mocker"); const util_1 = require("./util"); /** * Manages a group of defined mocks in a more efficient way of writing test code */ class Mockers { constructor(mocks) { Object.assign(this, mocks); } /** * Wraps * @param mocks * @returns */ static wrap(mocks) { return new this(mocks); } /** * Return fresh instance of mocks manager(usually used in beforeEach) * @returns */ xFresh() { const obj = {}; for (const p in this) { obj[p] = Mocker_1.Mocker.of(p); } return new Mockers(obj); } /** * Create object of given class constructor with injected mocks and other non Mock args; * @param ctr * @param nonMockArgs * @returns */ xNewInject(ctr, nonMockArgs = []) { const args = this.xConstructorArgs(ctr, nonMockArgs); return new ctr(...args); } xConstructorArgs(ctr, nonMockArgs = []) { const args = []; const isNonMockArgsArray = Array.isArray(nonMockArgs); for (const p of (0, util_1.getConstructorParams)(ctr)) { const arg = this[p] ? this[p].i : isNonMockArgsArray ? nonMockArgs.shift() : nonMockArgs[p]; if (arg === undefined) { throw new Error(`Missing value of parameter '${p}', check your test code`); } args.push(arg); } return args; } /** * Checks expections of all managed mocks(usually used in afterEach) */ xCheckExpections() { Object.entries(this).forEach(([_key, value]) => { value.checkExpections(); }); } } exports.Mockers = Mockers; const mocks = (mocks) => Mockers.wrap(mocks); exports.mocks = mocks;