Skip to content

Commit bf2bd1a

Browse files
authored
feat(store): make reducers accessible from ReducerManager (#3064)
* feat(reducer-manager): permit to access reducers * ref: rename reducerSnapshot to currentReducers * test: apply check if getter for currentReducers works as expected
1 parent 97643eb commit bf2bd1a

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { createReducer, ReducerManager, StoreModule } from '@ngrx/store';
3+
4+
describe(ReducerManager.name, () => {
5+
it('should provide reducers being registered in store', () => {
6+
TestBed.configureTestingModule({
7+
imports: [
8+
StoreModule.forRoot({
9+
'feature-1': createReducer(0),
10+
}),
11+
],
12+
});
13+
14+
const reducerManager = TestBed.inject(ReducerManager);
15+
16+
expect(Object.keys(reducerManager.currentReducers)).toContain('feature-1');
17+
});
18+
19+
it('should provide reducers being registered at runtime', () => {
20+
TestBed.configureTestingModule({
21+
imports: [
22+
StoreModule.forRoot({
23+
'feature-1': createReducer(0),
24+
}),
25+
],
26+
});
27+
28+
const reducerManager = TestBed.inject(ReducerManager);
29+
30+
reducerManager.addReducer('feature-2', createReducer(0));
31+
32+
expect(Object.keys(reducerManager.currentReducers)).toContain('feature-1');
33+
expect(Object.keys(reducerManager.currentReducers)).toContain('feature-2');
34+
});
35+
});

modules/store/src/reducer_manager.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Inject, Injectable, OnDestroy, Provider } from '@angular/core';
22
import { BehaviorSubject, Observable } from 'rxjs';
3-
43
import { ActionsSubject } from './actions_subject';
54
import {
65
Action,
@@ -26,6 +25,10 @@ export const UPDATE = '@ngrx/store/update-reducers' as const;
2625
export class ReducerManager
2726
extends BehaviorSubject<ActionReducer<any, any>>
2827
implements OnDestroy {
28+
get currentReducers(): ActionReducerMap<any, any> {
29+
return this.reducers;
30+
}
31+
2932
constructor(
3033
private dispatcher: ReducerManagerDispatcher,
3134
@Inject(INITIAL_STATE) private initialState: any,

0 commit comments

Comments
 (0)