@suites/doubles.jest
Version:
57 lines (56 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mock = void 0;
const overrideMockImp = (obj) => {
const proxy = new Proxy(obj, handler());
for (const name of Object.keys(obj)) {
if (typeof obj[name] === 'object' && obj[name] !== null) {
// @ts-ignore
proxy[name] = overrideMockImp(obj[name]);
}
else {
// @ts-ignore
proxy[name] = obj[name];
}
}
return proxy;
};
const handler = () => ({
set: (obj, property, value) => {
// @ts-ignore https://github.com/microsoft/TypeScript/issues/1863
obj[property] = value;
return true;
},
get: (obj, property) => {
// @ts-ignore
if (!(property in obj)) {
if (property === 'then') {
return undefined;
}
// Jest's internal equality checking does some wierd stuff to check for iterable equality
if (property === Symbol.iterator) {
// @ts-ignore
return obj[property];
}
if (property !== 'calls') {
// @ts-ignore
obj[property] = new Proxy(jest.fn(), handler());
// @ts-ignore private property
obj[property]._isMockObject = true;
}
}
// @ts-ignore
if (obj instanceof Date && typeof obj[property] === 'function') {
// @ts-ignore
return obj[property].bind(obj);
}
// @ts-ignore
return obj[property];
},
});
const mock = (mockImplementation = {}) => {
// @ts-ignore private property
mockImplementation._isMockObject = true;
return overrideMockImp(mockImplementation);
};
exports.mock = mock;