UNPKG

@suites/doubles.jest

Version:
57 lines (56 loc) 1.79 kB
"use strict"; 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;