UNPKG

@simplux/testing

Version:

The testing package for simplux. Contains various testing utilities (e.g. for mocking module states and mutations).

36 lines (35 loc) 4.41 kB
import { _getEffectMocks, } from '@simplux/core'; import { registerMockCleanupFunction } from './cleanup.js'; /** * Specify a mock function that should be called instead of the * effect. The effect will stay mocked indefinitely until either * the clear callback or `clearAllSimpluxMocks` is called. * * @param effect - the effect to mock * @param mockFn - the mock function to use * * @returns a function that clears the mock when called * * @public */ export function mockEffect(effectToMock, mockFn) { const mockDefinitions = _getEffectMocks(); removeMock(mockDefinitions, effectToMock); mockDefinitions.push({ effectToMock, mockFn, }); const cleanup = () => { removeMock(mockDefinitions, effectToMock); clearCleanup(); }; const clearCleanup = registerMockCleanupFunction(cleanup); return [mockFn, cleanup]; } function removeMock(mockDefinitions, effectToMock) { const idx = mockDefinitions.findIndex((def) => def.effectToMock === effectToMock); if (idx >= 0) { mockDefinitions.splice(idx, 1); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0cy5qcyIsInNvdXJjZXMiOlsiQHNpbXBsdXgvdGVzdGluZy9zcmMvZWZmZWN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEZ1bmN0aW9uU2lnbmF0dXJlLFxyXG4gIFNpbXBsdXhFZmZlY3QsXHJcbiAgX0VmZmVjdE1vY2tEZWZpbml0aW9uLFxyXG4gIF9nZXRFZmZlY3RNb2NrcyxcclxufSBmcm9tICdAc2ltcGx1eC9jb3JlJ1xyXG5pbXBvcnQgeyByZWdpc3Rlck1vY2tDbGVhbnVwRnVuY3Rpb24gfSBmcm9tICcuL2NsZWFudXAuanMnXHJcblxyXG4vKipcclxuICogU3BlY2lmeSBhIG1vY2sgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlXHJcbiAqIGVmZmVjdC4gVGhlIGVmZmVjdCB3aWxsIHN0YXkgbW9ja2VkIGluZGVmaW5pdGVseSB1bnRpbCBlaXRoZXJcclxuICogdGhlIGNsZWFyIGNhbGxiYWNrIG9yIGBjbGVhckFsbFNpbXBsdXhNb2Nrc2AgaXMgY2FsbGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWZmZWN0IC0gdGhlIGVmZmVjdCB0byBtb2NrXHJcbiAqIEBwYXJhbSBtb2NrRm4gLSB0aGUgbW9jayBmdW5jdGlvbiB0byB1c2VcclxuICpcclxuICogQHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNsZWFycyB0aGUgbW9jayB3aGVuIGNhbGxlZFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbW9ja0VmZmVjdDxcclxuICBURWZmZWN0IGV4dGVuZHMgU2ltcGx1eEVmZmVjdDwoLi4uYXJnczogYW55W10pID0+IGFueT4sXHJcbiAgVE1vY2sgZXh0ZW5kcyBGdW5jdGlvblNpZ25hdHVyZTxURWZmZWN0PlxyXG4+KGVmZmVjdFRvTW9jazogVEVmZmVjdCwgbW9ja0ZuOiBUTW9jayk6IFtUTW9jaywgKCkgPT4gdm9pZF0ge1xyXG4gIGNvbnN0IG1vY2tEZWZpbml0aW9ucyA9IF9nZXRFZmZlY3RNb2NrcygpXHJcblxyXG4gIHJlbW92ZU1vY2sobW9ja0RlZmluaXRpb25zLCBlZmZlY3RUb01vY2spXHJcblxyXG4gIG1vY2tEZWZpbml0aW9ucy5wdXNoKHtcclxuICAgIGVmZmVjdFRvTW9jayxcclxuICAgIG1vY2tGbixcclxuICB9KVxyXG5cclxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgcmVtb3ZlTW9jayhtb2NrRGVmaW5pdGlvbnMsIGVmZmVjdFRvTW9jaylcclxuICAgIGNsZWFyQ2xlYW51cCgpXHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGVhckNsZWFudXAgPSByZWdpc3Rlck1vY2tDbGVhbnVwRnVuY3Rpb24oY2xlYW51cClcclxuXHJcbiAgcmV0dXJuIFttb2NrRm4sIGNsZWFudXBdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZU1vY2s8XHJcbiAgVEVmZmVjdCBleHRlbmRzIFNpbXBsdXhFZmZlY3Q8VEVmZmVjdEZ1bmN0aW9uPixcclxuICBURWZmZWN0RnVuY3Rpb24gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueVxyXG4+KG1vY2tEZWZpbml0aW9uczogX0VmZmVjdE1vY2tEZWZpbml0aW9uW10sIGVmZmVjdFRvTW9jazogVEVmZmVjdCkge1xyXG4gIGNvbnN0IGlkeCA9IG1vY2tEZWZpbml0aW9ucy5maW5kSW5kZXgoXHJcbiAgICAoZGVmKSA9PiBkZWYuZWZmZWN0VG9Nb2NrID09PSBlZmZlY3RUb01vY2ssXHJcbiAgKVxyXG5cclxuICBpZiAoaWR4ID49IDApIHtcclxuICAgIG1vY2tEZWZpbml0aW9ucy5zcGxpY2UoaWR4LCAxKVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FHeEIsWUFBcUIsRUFBRSxNQUFhO0lBQ3BDLE1BQU0sZUFBZSxHQUFHLGVBQWUsRUFBRSxDQUFBO0lBRXpDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFFekMsZUFBZSxDQUFDLElBQUksQ0FBQztRQUNuQixZQUFZO1FBQ1osTUFBTTtLQUNQLENBQUMsQ0FBQTtJQUVGLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUNuQixVQUFVLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3pDLFlBQVksRUFBRSxDQUFBO0lBQ2hCLENBQUMsQ0FBQTtJQUVELE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXpELE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUdqQixlQUF3QyxFQUFFLFlBQXFCO0lBQy9ELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQ25DLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FDM0MsQ0FBQTtJQUVELElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNaLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0tBQy9CO0FBQ0gsQ0FBQyJ9