UNPKG

ngrx-reducer-effects

Version:

Return side-effects as data from your NgRx reducers

44 lines 5.88 kB
import { __awaiter } from "tslib"; import { Store } from '@ngrx/store'; import { TestBed } from '@angular/core/testing'; import { EffectStoreModule } from 'ngrx-reducer-effects'; import { first } from 'rxjs/operators'; export function reduceWithEffects(reducer, actions, config) { return __awaiter(this, void 0, void 0, function* () { jest.useFakeTimers(); TestBed.configureTestingModule({ imports: [EffectStoreModule.forRoot({ feature: reducer })], providers: config === null || config === void 0 ? void 0 : config.providers }); const store = TestBed.inject(Store); for (const action of actions) { store.dispatch(action); jest.runOnlyPendingTimers(); } jest.useRealTimers(); return yield firstValueFrom(store.select((state) => state.feature)); }); } export const testing = {}; expect.extend({ toHaveEffect(received, expected) { const pass = received.effects.includes(expected); if (pass) { return { pass: true, message: () => `expected reducer to have effect ${expected.type}` }; } else { return { pass: false, message: () => `expected reducer to have effect ${expected.type}` }; } } }); /* Util */ function firstValueFrom(obs$) { return obs$.pipe(first()).toPromise(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvdGVzdGluZy9zcmMvdGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFTLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBRXRHLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQyxNQUFNLFVBQWdCLGlCQUFpQixDQUNyQyxPQUE4QixFQUM5QixPQUFpQixFQUNqQixNQUFlOztRQUVmLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDN0IsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7WUFDeEQsU0FBUyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUErQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0NBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBVTFCLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDWixZQUFZLENBQUMsUUFBK0IsRUFBRSxRQUEyQjtRQUN2RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1DQUFtQyxRQUFRLENBQUMsSUFBSSxFQUFFO2FBQ2xFLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTztnQkFDTCxJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsbUNBQW1DLFFBQVEsQ0FBQyxJQUFJLEVBQUU7YUFDbEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUNILFVBQVU7QUFFVixTQUFTLGNBQWMsQ0FBSSxJQUFtQjtJQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3Rpb24sIFN0b3JlfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Rlc3RCZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XHJcbmltcG9ydCB7RWZmZWN0U3RvcmVNb2R1bGUsIEVmZmVjdENvbmZpZywgU3RhdGVXaXRoRWZmZWN0cywgQWN0aW9uUmVkdWNlcn0gZnJvbSAnbmdyeC1yZWR1Y2VyLWVmZmVjdHMnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG50eXBlIENvbmZpZyA9IHsgcHJvdmlkZXJzPzogUHJvdmlkZXJbXSB9O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZHVjZVdpdGhFZmZlY3RzPFRTdGF0ZT4oXHJcbiAgcmVkdWNlcjogQWN0aW9uUmVkdWNlcjxUU3RhdGU+LFxyXG4gIGFjdGlvbnM6IEFjdGlvbltdLFxyXG4gIGNvbmZpZz86IENvbmZpZ1xyXG4pOiBQcm9taXNlPFRTdGF0ZT4ge1xyXG4gIGplc3QudXNlRmFrZVRpbWVycygpO1xyXG4gIFRlc3RCZWQuY29uZmlndXJlVGVzdGluZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbRWZmZWN0U3RvcmVNb2R1bGUuZm9yUm9vdCh7ZmVhdHVyZTogcmVkdWNlcn0pXSxcclxuICAgIHByb3ZpZGVyczogY29uZmlnPy5wcm92aWRlcnNcclxuICB9KTtcclxuICBjb25zdCBzdG9yZTogU3RvcmU8eyBmZWF0dXJlOiBUU3RhdGUgfT4gPSBUZXN0QmVkLmluamVjdChTdG9yZSk7XHJcbiAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xyXG4gICAgc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcclxuICAgIGplc3QucnVuT25seVBlbmRpbmdUaW1lcnMoKTtcclxuICB9XHJcbiAgamVzdC51c2VSZWFsVGltZXJzKCk7XHJcbiAgcmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHN0b3JlLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmZlYXR1cmUpKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHRlc3RpbmcgPSB7fTtcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBuYW1lc3BhY2UgamVzdCB7XHJcbiAgICBpbnRlcmZhY2UgTWF0Y2hlcnM8Uj4ge1xyXG4gICAgICB0b0hhdmVFZmZlY3QoZXhwZWN0ZWQ6IEVmZmVjdENvbmZpZzxhbnk+KTogUjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cGVjdC5leHRlbmQoe1xyXG4gIHRvSGF2ZUVmZmVjdChyZWNlaXZlZDogU3RhdGVXaXRoRWZmZWN0czxhbnk+LCBleHBlY3RlZDogRWZmZWN0Q29uZmlnPGFueT4pOiBhbnkge1xyXG4gICAgY29uc3QgcGFzcyA9IHJlY2VpdmVkLmVmZmVjdHMuaW5jbHVkZXMoZXhwZWN0ZWQpO1xyXG4gICAgaWYgKHBhc3MpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwYXNzOiB0cnVlLFxyXG4gICAgICAgIG1lc3NhZ2U6ICgpID0+IGBleHBlY3RlZCByZWR1Y2VyIHRvIGhhdmUgZWZmZWN0ICR7ZXhwZWN0ZWQudHlwZX1gXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHBhc3M6IGZhbHNlLFxyXG4gICAgICAgIG1lc3NhZ2U6ICgpID0+IGBleHBlY3RlZCByZWR1Y2VyIHRvIGhhdmUgZWZmZWN0ICR7ZXhwZWN0ZWQudHlwZX1gXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG59KTtcclxuLyogVXRpbCAqL1xyXG5cclxuZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb208VD4ob2JzJDogT2JzZXJ2YWJsZTxUPik6IFByb21pc2U8VD4ge1xyXG4gIHJldHVybiBvYnMkLnBpcGUoZmlyc3QoKSkudG9Qcm9taXNlKCk7XHJcbn1cclxuIl19