ngrx-run
Version:
Return side-effects as data from your NgRx reducers
44 lines • 5.84 kB
JavaScript
import { __awaiter } from "tslib";
import { Store } from '@ngrx/store';
import { TestBed } from '@angular/core/testing';
import { EffectStoreModule } from 'ngrx-run';
import { first } from 'rxjs/operators';
export function simulate(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvdGVzdGluZy9zcmMvdGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFTLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFnRCxNQUFNLFVBQVUsQ0FBQztBQUUxRixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJckMsTUFBTSxVQUFnQixRQUFRLENBQzVCLE9BQThCLEVBQzlCLE9BQWlCLEVBQ2pCLE1BQWU7O1FBRWYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztZQUM3QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztZQUN4RCxTQUFTLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVM7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQStCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLE1BQU0sY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFVMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNaLFlBQVksQ0FBQyxRQUErQixFQUFFLFFBQWdDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsbUNBQW1DLFFBQVEsQ0FBQyxJQUFJLEVBQUU7YUFDbEUsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLO2dCQUNYLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxtQ0FBbUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUNsRSxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBQ0gsVUFBVTtBQUVWLFNBQVMsY0FBYyxDQUFJLElBQW1CO0lBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGlvbiwgU3RvcmV9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VGVzdEJlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcclxuaW1wb3J0IHtFZmZlY3RTdG9yZU1vZHVsZSwgRWZmZWN0Q29uZmlnLCBTdGF0ZVdpdGhFZmZlY3RzLCBBY3Rpb25SZWR1Y2VyfSBmcm9tICduZ3J4LXJ1bic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbnR5cGUgQ29uZmlnID0geyBwcm92aWRlcnM/OiBQcm92aWRlcltdIH07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2ltdWxhdGU8VFN0YXRlPihcclxuICByZWR1Y2VyOiBBY3Rpb25SZWR1Y2VyPFRTdGF0ZT4sXHJcbiAgYWN0aW9uczogQWN0aW9uW10sXHJcbiAgY29uZmlnPzogQ29uZmlnXHJcbik6IFByb21pc2U8VFN0YXRlPiB7XHJcbiAgamVzdC51c2VGYWtlVGltZXJzKCk7XHJcbiAgVGVzdEJlZC5jb25maWd1cmVUZXN0aW5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtFZmZlY3RTdG9yZU1vZHVsZS5mb3JSb290KHtmZWF0dXJlOiByZWR1Y2VyfSldLFxyXG4gICAgcHJvdmlkZXJzOiBjb25maWc/LnByb3ZpZGVyc1xyXG4gIH0pO1xyXG4gIGNvbnN0IHN0b3JlOiBTdG9yZTx7IGZlYXR1cmU6IFRTdGF0ZSB9PiA9IFRlc3RCZWQuaW5qZWN0KFN0b3JlKTtcclxuICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XHJcbiAgICBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVycygpO1xyXG4gIH1cclxuICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcclxuICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oc3RvcmUuc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuZmVhdHVyZSkpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdGVzdGluZyA9IHt9O1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIG5hbWVzcGFjZSBqZXN0IHtcclxuICAgIGludGVyZmFjZSBNYXRjaGVyczxSPiB7XHJcbiAgICAgIHRvSGF2ZUVmZmVjdChleHBlY3RlZDogRWZmZWN0Q29uZmlnPGFueSwgYW55Pik6IFI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBlY3QuZXh0ZW5kKHtcclxuICB0b0hhdmVFZmZlY3QocmVjZWl2ZWQ6IFN0YXRlV2l0aEVmZmVjdHM8YW55PiwgZXhwZWN0ZWQ6IEVmZmVjdENvbmZpZzxhbnksIGFueT4pOiBhbnkge1xyXG4gICAgY29uc3QgcGFzcyA9IHJlY2VpdmVkLmVmZmVjdHMuaW5jbHVkZXMoZXhwZWN0ZWQpO1xyXG4gICAgaWYgKHBhc3MpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwYXNzOiB0cnVlLFxyXG4gICAgICAgIG1lc3NhZ2U6ICgpID0+IGBleHBlY3RlZCByZWR1Y2VyIHRvIGhhdmUgZWZmZWN0ICR7ZXhwZWN0ZWQudHlwZX1gXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHBhc3M6IGZhbHNlLFxyXG4gICAgICAgIG1lc3NhZ2U6ICgpID0+IGBleHBlY3RlZCByZWR1Y2VyIHRvIGhhdmUgZWZmZWN0ICR7ZXhwZWN0ZWQudHlwZX1gXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG59KTtcclxuLyogVXRpbCAqL1xyXG5cclxuZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb208VD4ob2JzJDogT2JzZXJ2YWJsZTxUPik6IFByb21pc2U8VD4ge1xyXG4gIHJldHVybiBvYnMkLnBpcGUoZmlyc3QoKSkudG9Qcm9taXNlKCk7XHJcbn1cclxuIl19