@hexancore/mocker
Version:
Simple and magical mocks for TypeScript, works with jest and vitest
66 lines (65 loc) • 1.91 kB
JavaScript
;
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;