safe-mock
Version:
Type Safe Mocking Library written for Typescript and Javascript
64 lines (63 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var valueIfNoReturnValueSet_1 = require("./valueIfNoReturnValueSet");
var ArgumentInvocation_1 = require("./ArgumentInvocation");
var _setStubbedActionNoArgsSymbol_1 = require("./_setStubbedActionNoArgsSymbol");
var Verifier_1 = require("./Verifier");
var StubbedActionMatcherRepo_1 = require("./StubbedActionMatcherRepo");
var _setStubbedActionNoArgsSymbol_2 = require("./_setStubbedActionNoArgsSymbol");
var verifier = (function (mockToVerify) {
return mockToVerify.verifier;
});
verifier.unsafe = verifier;
exports.verifyInTests = verifier;
var callableMock = Symbol('CallableMock');
var ProxyMock = /** @class */ (function () {
function ProxyMock() {
this.stubbedActionMatcherRepo = new StubbedActionMatcherRepo_1.StubbedActionMatcherRepo();
}
ProxyMock.prototype.get = function (target, propertyKey, receiver) {
var _this = this;
if (propertyKey === 'resetMock') {
return function () {
_this.stubbedActionMatcherRepo = new StubbedActionMatcherRepo_1.StubbedActionMatcherRepo();
};
}
else if (propertyKey === _setStubbedActionNoArgsSymbol_2.default) {
return function (stubbedAction) {
return _this.stubbedActionMatcherRepo.setStubbedActionForAnyArgs(callableMock, stubbedAction);
};
}
return this.buildMockedMethod(propertyKey);
};
ProxyMock.prototype.apply = function (target, thisArg, argArray) {
return this.buildMockedMethod(callableMock).apply(void 0, argArray);
};
ProxyMock.prototype.buildMockedMethod = function (propertyKey) {
var _this = this;
var mockedFunc = function () {
var argsToMatch = [];
for (var _i = 0; _i < arguments.length; _i++) {
argsToMatch[_i] = arguments[_i];
}
var lookUpResult = _this.stubbedActionMatcherRepo
.recordAndFindMatch(propertyKey, new ArgumentInvocation_1.default(argsToMatch));
if (lookUpResult.returnFound)
return lookUpResult.performMockedReturnValue();
return valueIfNoReturnValueSet_1.valueIfNoReturnValueSet(lookUpResult.whyNoReturnValueMatched, function (stubbedAction) {
return _this.stubbedActionMatcherRepo.setStubbedActionForArgs(propertyKey, new ArgumentInvocation_1.default(argsToMatch), stubbedAction);
});
};
mockedFunc.verifier = new Verifier_1.Verifier(this.stubbedActionMatcherRepo, propertyKey);
mockedFunc.resetMock = function () {
_this.stubbedActionMatcherRepo.resetPropertyKey(propertyKey);
};
mockedFunc[_setStubbedActionNoArgsSymbol_1.default] =
function (stubbedAction) {
return _this.stubbedActionMatcherRepo.setStubbedActionForAnyArgs(propertyKey, stubbedAction);
};
return mockedFunc;
};
return ProxyMock;
}());
exports.ProxyMock = ProxyMock;