UNPKG

11.3 kBJavaScriptView Raw
1import { Injectable, InjectionToken, Inject, Injector } from '@angular/core';
2import { BehaviorSubject } from 'rxjs';
3import { Store, createSelector, ActionsSubject, ReducerManager, INITIAL_STATE, setNgrxMockEnvironment, StateObservable } from '@ngrx/store';
4import { TestBed } from '@angular/core/testing';
5
6/**
7 * @fileoverview added by tsickle
8 * Generated from: mock_state.ts
9 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
10 */
11/**
12 * @template T
13 */
14class MockState extends BehaviorSubject {
15 constructor() {
16 super((/** @type {?} */ ({})));
17 }
18}
19MockState.decorators = [
20 { type: Injectable }
21];
22/** @nocollapse */
23MockState.ctorParameters = () => [];
24
25/**
26 * @fileoverview added by tsickle
27 * Generated from: tokens.ts
28 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
29 */
30/** @type {?} */
31const MOCK_SELECTORS = new InjectionToken('@ngrx/store Mock Selectors');
32
33/**
34 * @fileoverview added by tsickle
35 * Generated from: mock_store.ts
36 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
37 */
38if (typeof afterEach === 'function') {
39 afterEach((/**
40 * @return {?}
41 */
42 () => {
43 try {
44 /** @type {?} */
45 const mockStore = TestBed.inject(MockStore);
46 if (mockStore) {
47 mockStore.resetSelectors();
48 }
49 }
50 catch (_a) { }
51 }));
52}
53/**
54 * @template T
55 */
56class MockStore extends Store {
57 /**
58 * @param {?} state$
59 * @param {?} actionsObserver
60 * @param {?} reducerManager
61 * @param {?} initialState
62 * @param {?=} mockSelectors
63 */
64 constructor(state$, actionsObserver, reducerManager, initialState, mockSelectors = []) {
65 super(state$, actionsObserver, reducerManager);
66 this.state$ = state$;
67 this.initialState = initialState;
68 this.selectors = new Map();
69 this.resetSelectors();
70 this.setState(this.initialState);
71 this.scannedActions$ = actionsObserver.asObservable();
72 for (const mockSelector of mockSelectors) {
73 this.overrideSelector(mockSelector.selector, mockSelector.value);
74 }
75 }
76 /**
77 * @param {?} nextState
78 * @return {?}
79 */
80 setState(nextState) {
81 this.state$.next(nextState);
82 this.lastState = nextState;
83 }
84 /**
85 * @template Selector, Value, Result
86 * @param {?} selector
87 * @param {?} value
88 * @return {?}
89 */
90 overrideSelector(selector, value) {
91 this.selectors.set(selector, value);
92 /** @type {?} */
93 const resultSelector = typeof selector === 'string'
94 ? createSelector((/**
95 * @return {?}
96 */
97 () => { }), (/**
98 * @return {?}
99 */
100 () => value))
101 : selector;
102 resultSelector.setResult(value);
103 return (/** @type {?} */ (resultSelector));
104 }
105 /**
106 * @return {?}
107 */
108 resetSelectors() {
109 for (const selector of this.selectors.keys()) {
110 if (typeof selector !== 'string') {
111 selector.release();
112 selector.clearResult();
113 }
114 }
115 this.selectors.clear();
116 }
117 /**
118 * @param {?} selector
119 * @param {?=} prop
120 * @return {?}
121 */
122 select(selector, prop) {
123 if (typeof selector === 'string' && this.selectors.has(selector)) {
124 return new BehaviorSubject(this.selectors.get(selector)).asObservable();
125 }
126 return super.select(selector, prop);
127 }
128 /**
129 * @return {?}
130 */
131 addReducer() {
132 /* noop */
133 }
134 /**
135 * @return {?}
136 */
137 removeReducer() {
138 /* noop */
139 }
140 /**
141 * Refreshes the existing state.
142 * @return {?}
143 */
144 refreshState() {
145 if (this.lastState)
146 this.setState(Object.assign({}, this.lastState));
147 }
148}
149MockStore.decorators = [
150 { type: Injectable }
151];
152/** @nocollapse */
153MockStore.ctorParameters = () => [
154 { type: MockState },
155 { type: ActionsSubject },
156 { type: ReducerManager },
157 { type: undefined, decorators: [{ type: Inject, args: [INITIAL_STATE,] }] },
158 { type: Array, decorators: [{ type: Inject, args: [MOCK_SELECTORS,] }] }
159];
160if (false) {
161 /**
162 * @type {?}
163 * @private
164 */
165 MockStore.prototype.selectors;
166 /** @type {?} */
167 MockStore.prototype.scannedActions$;
168 /**
169 * @type {?}
170 * @private
171 */
172 MockStore.prototype.lastState;
173 /**
174 * @type {?}
175 * @private
176 */
177 MockStore.prototype.state$;
178 /**
179 * @type {?}
180 * @private
181 */
182 MockStore.prototype.initialState;
183}
184
185/**
186 * @fileoverview added by tsickle
187 * Generated from: mock_reducer_manager.ts
188 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
189 */
190class MockReducerManager extends BehaviorSubject {
191 constructor() {
192 super((/**
193 * @return {?}
194 */
195 () => undefined));
196 }
197 /**
198 * @param {?} feature
199 * @return {?}
200 */
201 addFeature(feature) {
202 /* noop */
203 }
204 /**
205 * @param {?} feature
206 * @return {?}
207 */
208 addFeatures(feature) {
209 /* noop */
210 }
211 /**
212 * @param {?} feature
213 * @return {?}
214 */
215 removeFeature(feature) {
216 /* noop */
217 }
218 /**
219 * @param {?} features
220 * @return {?}
221 */
222 removeFeatures(features) {
223 /* noop */
224 }
225 /**
226 * @param {?} key
227 * @param {?} reducer
228 * @return {?}
229 */
230 addReducer(key, reducer) {
231 /* noop */
232 }
233 /**
234 * @param {?} reducers
235 * @return {?}
236 */
237 addReducers(reducers) {
238 /* noop */
239 }
240 /**
241 * @param {?} featureKey
242 * @return {?}
243 */
244 removeReducer(featureKey) {
245 /* noop */
246 }
247 /**
248 * @param {?} featureKeys
249 * @return {?}
250 */
251 removeReducers(featureKeys) {
252 /* noop */
253 }
254}
255MockReducerManager.decorators = [
256 { type: Injectable }
257];
258/** @nocollapse */
259MockReducerManager.ctorParameters = () => [];
260
261/**
262 * @fileoverview added by tsickle
263 * Generated from: testing.ts
264 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
265 */
266/**
267 * @record
268 * @template T
269 */
270function MockStoreConfig() { }
271if (false) {
272 /** @type {?|undefined} */
273 MockStoreConfig.prototype.initialState;
274 /** @type {?|undefined} */
275 MockStoreConfig.prototype.selectors;
276}
277/**
278 * \@description
279 * Creates mock store providers.
280 *
281 * \@usageNotes
282 *
283 * **With `TestBed.configureTestingModule`**
284 *
285 * ```typescript
286 * describe('Books Component', () => {
287 * let store: MockStore;
288 *
289 * beforeEach(() => {
290 * TestBed.configureTestingModule({
291 * providers: [
292 * provideMockStore({
293 * initialState: { books: { entities: [] } },
294 * selectors: [
295 * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
296 * { selector: selectVisibleBooks, value: ['Book 1'] },
297 * ],
298 * }),
299 * ],
300 * });
301 *
302 * store = TestBed.inject(MockStore);
303 * });
304 * });
305 * ```
306 *
307 * **With `Injector.create`**
308 *
309 * ```typescript
310 * describe('Counter Component', () => {
311 * let injector: Injector;
312 * let store: MockStore;
313 *
314 * beforeEach(() => {
315 * injector = Injector.create({
316 * providers: [
317 * provideMockStore({ initialState: { counter: 0 } }),
318 * ],
319 * });
320 * store = injector.get(MockStore);
321 * });
322 * });
323 * ```
324 * @template T
325 * @param {?=} config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
326 * By default, `initialState` and `selectors` are not defined.
327 * @return {?} Mock store providers that can be used with both `TestBed.configureTestingModule` and `Injector.create`.
328 *
329 */
330function provideMockStore(config = {}) {
331 setNgrxMockEnvironment(true);
332 return [
333 {
334 provide: ActionsSubject,
335 useFactory: (/**
336 * @return {?}
337 */
338 () => new ActionsSubject()),
339 deps: [],
340 },
341 { provide: MockState, useFactory: (/**
342 * @return {?}
343 */
344 () => new MockState()), deps: [] },
345 {
346 provide: MockReducerManager,
347 useFactory: (/**
348 * @return {?}
349 */
350 () => new MockReducerManager()),
351 deps: [],
352 },
353 { provide: INITIAL_STATE, useValue: config.initialState || {} },
354 { provide: MOCK_SELECTORS, useValue: config.selectors },
355 { provide: StateObservable, useExisting: MockState },
356 { provide: ReducerManager, useExisting: MockReducerManager },
357 {
358 provide: MockStore,
359 useFactory: mockStoreFactory,
360 deps: [
361 MockState,
362 ActionsSubject,
363 ReducerManager,
364 INITIAL_STATE,
365 MOCK_SELECTORS,
366 ],
367 },
368 { provide: Store, useExisting: MockStore },
369 ];
370}
371/**
372 * @template T
373 * @param {?} mockState
374 * @param {?} actionsSubject
375 * @param {?} reducerManager
376 * @param {?} initialState
377 * @param {?} mockSelectors
378 * @return {?}
379 */
380function mockStoreFactory(mockState, actionsSubject, reducerManager, initialState, mockSelectors) {
381 return new MockStore(mockState, actionsSubject, reducerManager, initialState, mockSelectors);
382}
383/**
384 * \@description
385 * Creates mock store with all necessary dependencies outside of the `TestBed`.
386 *
387 * \@usageNotes
388 *
389 * ```typescript
390 * describe('Books Effects', () => {
391 * let store: MockStore;
392 *
393 * beforeEach(() => {
394 * store = getMockStore({
395 * initialState: { books: { entities: ['Book 1', 'Book 2', 'Book 3'] } },
396 * selectors: [
397 * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
398 * { selector: selectVisibleBooks, value: ['Book 1'] },
399 * ],
400 * });
401 * });
402 * });
403 * ```
404 * @template T
405 * @param {?=} config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
406 * By default, `initialState` and `selectors` are not defined.
407 * @return {?} `MockStore<T>`
408 *
409 */
410function getMockStore(config = {}) {
411 /** @type {?} */
412 const injector = Injector.create({ providers: provideMockStore(config) });
413 return injector.get(MockStore);
414}
415
416/**
417 * @fileoverview added by tsickle
418 * Generated from: public_api.ts
419 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
420 */
421
422/**
423 * @fileoverview added by tsickle
424 * Generated from: ngrx-store-testing.ts
425 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
426 */
427
428export { MockReducerManager, MockState, MockStore, getMockStore, provideMockStore, MOCK_SELECTORS as ɵa };
429//# sourceMappingURL=ngrx-store-testing.js.map