mockzilla
Version:
A mocking toolkit leveraging the power of TypeScript to enhance your jest experience.
34 lines (33 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mockAssimilate = void 0;
const error_1 = require("./error");
const utils_1 = require("./utils");
const deepMock_1 = require("./deepMock");
function mockAssimilate(instance, name, { mock: mockKeys, whitelist }) {
const [proxy, mock] = (0, deepMock_1.deepMock)(name);
const properties = (0, utils_1.getAllProperties)(instance);
// Validate, that every mock is in properties
for (const key of mockKeys) {
if (!properties.includes(key))
throw new error_1.MockzillaError(`Property "${key}" does not exist on ${name}, so it can't be assimilated`);
else if (typeof instance[key] !== "function")
throw new error_1.MockzillaError(`Property "${key}" on ${name} is not a function, so it can't be assimilated`);
}
// Validate, that every whitelist item is in properties
if (whitelist) {
const key = whitelist.find((property) => !properties.includes(property));
if (key)
throw new error_1.MockzillaError(`Property "${key}" does not exist on ${name}, so it can't be whitelisted`);
}
for (const property of properties) {
if (mockKeys.includes(property)) {
mock[property].mockAllowMethod();
instance[property] = proxy[property];
}
else if (whitelist && !whitelist.includes(property))
(0, utils_1.denyPropertyAccess)(instance, property);
}
return mock;
}
exports.mockAssimilate = mockAssimilate;