@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
JavaScript
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