UNPKG

25.4 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@ngrx/store'), require('@angular/core/testing')) :
3 typeof define === 'function' && define.amd ? define('@ngrx/store/testing', ['exports', '@angular/core', 'rxjs', '@ngrx/store', '@angular/core/testing'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ngrx = global.ngrx || {}, global.ngrx.store = global.ngrx.store || {}, global.ngrx.store.testing = {}), global.ng.core, global.rxjs, global.ngrx.store, global.ng.core.testing));
5}(this, (function (exports, core, rxjs, store, testing) { 'use strict';
6
7 /*! *****************************************************************************
8 Copyright (c) Microsoft Corporation.
9
10 Permission to use, copy, modify, and/or distribute this software for any
11 purpose with or without fee is hereby granted.
12
13 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 PERFORMANCE OF THIS SOFTWARE.
20 ***************************************************************************** */
21 /* global Reflect, Promise */
22 var extendStatics = function (d, b) {
23 extendStatics = Object.setPrototypeOf ||
24 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
25 function (d, b) { for (var p in b)
26 if (Object.prototype.hasOwnProperty.call(b, p))
27 d[p] = b[p]; };
28 return extendStatics(d, b);
29 };
30 function __extends(d, b) {
31 if (typeof b !== "function" && b !== null)
32 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
33 extendStatics(d, b);
34 function __() { this.constructor = d; }
35 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
36 }
37 var __assign = function () {
38 __assign = Object.assign || function __assign(t) {
39 for (var s, i = 1, n = arguments.length; i < n; i++) {
40 s = arguments[i];
41 for (var p in s)
42 if (Object.prototype.hasOwnProperty.call(s, p))
43 t[p] = s[p];
44 }
45 return t;
46 };
47 return __assign.apply(this, arguments);
48 };
49 function __rest(s, e) {
50 var t = {};
51 for (var p in s)
52 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
53 t[p] = s[p];
54 if (s != null && typeof Object.getOwnPropertySymbols === "function")
55 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
56 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
57 t[p[i]] = s[p[i]];
58 }
59 return t;
60 }
61 function __decorate(decorators, target, key, desc) {
62 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
63 if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
64 r = Reflect.decorate(decorators, target, key, desc);
65 else
66 for (var i = decorators.length - 1; i >= 0; i--)
67 if (d = decorators[i])
68 r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
69 return c > 3 && r && Object.defineProperty(target, key, r), r;
70 }
71 function __param(paramIndex, decorator) {
72 return function (target, key) { decorator(target, key, paramIndex); };
73 }
74 function __metadata(metadataKey, metadataValue) {
75 if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
76 return Reflect.metadata(metadataKey, metadataValue);
77 }
78 function __awaiter(thisArg, _arguments, P, generator) {
79 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
80 return new (P || (P = Promise))(function (resolve, reject) {
81 function fulfilled(value) { try {
82 step(generator.next(value));
83 }
84 catch (e) {
85 reject(e);
86 } }
87 function rejected(value) { try {
88 step(generator["throw"](value));
89 }
90 catch (e) {
91 reject(e);
92 } }
93 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
94 step((generator = generator.apply(thisArg, _arguments || [])).next());
95 });
96 }
97 function __generator(thisArg, body) {
98 var _ = { label: 0, sent: function () { if (t[0] & 1)
99 throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
100 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
101 function verb(n) { return function (v) { return step([n, v]); }; }
102 function step(op) {
103 if (f)
104 throw new TypeError("Generator is already executing.");
105 while (_)
106 try {
107 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
108 return t;
109 if (y = 0, t)
110 op = [op[0] & 2, t.value];
111 switch (op[0]) {
112 case 0:
113 case 1:
114 t = op;
115 break;
116 case 4:
117 _.label++;
118 return { value: op[1], done: false };
119 case 5:
120 _.label++;
121 y = op[1];
122 op = [0];
123 continue;
124 case 7:
125 op = _.ops.pop();
126 _.trys.pop();
127 continue;
128 default:
129 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
130 _ = 0;
131 continue;
132 }
133 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
134 _.label = op[1];
135 break;
136 }
137 if (op[0] === 6 && _.label < t[1]) {
138 _.label = t[1];
139 t = op;
140 break;
141 }
142 if (t && _.label < t[2]) {
143 _.label = t[2];
144 _.ops.push(op);
145 break;
146 }
147 if (t[2])
148 _.ops.pop();
149 _.trys.pop();
150 continue;
151 }
152 op = body.call(thisArg, _);
153 }
154 catch (e) {
155 op = [6, e];
156 y = 0;
157 }
158 finally {
159 f = t = 0;
160 }
161 if (op[0] & 5)
162 throw op[1];
163 return { value: op[0] ? op[1] : void 0, done: true };
164 }
165 }
166 var __createBinding = Object.create ? (function (o, m, k, k2) {
167 if (k2 === undefined)
168 k2 = k;
169 Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
170 }) : (function (o, m, k, k2) {
171 if (k2 === undefined)
172 k2 = k;
173 o[k2] = m[k];
174 });
175 function __exportStar(m, o) {
176 for (var p in m)
177 if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
178 __createBinding(o, m, p);
179 }
180 function __values(o) {
181 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
182 if (m)
183 return m.call(o);
184 if (o && typeof o.length === "number")
185 return {
186 next: function () {
187 if (o && i >= o.length)
188 o = void 0;
189 return { value: o && o[i++], done: !o };
190 }
191 };
192 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
193 }
194 function __read(o, n) {
195 var m = typeof Symbol === "function" && o[Symbol.iterator];
196 if (!m)
197 return o;
198 var i = m.call(o), r, ar = [], e;
199 try {
200 while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
201 ar.push(r.value);
202 }
203 catch (error) {
204 e = { error: error };
205 }
206 finally {
207 try {
208 if (r && !r.done && (m = i["return"]))
209 m.call(i);
210 }
211 finally {
212 if (e)
213 throw e.error;
214 }
215 }
216 return ar;
217 }
218 /** @deprecated */
219 function __spread() {
220 for (var ar = [], i = 0; i < arguments.length; i++)
221 ar = ar.concat(__read(arguments[i]));
222 return ar;
223 }
224 /** @deprecated */
225 function __spreadArrays() {
226 for (var s = 0, i = 0, il = arguments.length; i < il; i++)
227 s += arguments[i].length;
228 for (var r = Array(s), k = 0, i = 0; i < il; i++)
229 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
230 r[k] = a[j];
231 return r;
232 }
233 function __spreadArray(to, from) {
234 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
235 to[j] = from[i];
236 return to;
237 }
238 function __await(v) {
239 return this instanceof __await ? (this.v = v, this) : new __await(v);
240 }
241 function __asyncGenerator(thisArg, _arguments, generator) {
242 if (!Symbol.asyncIterator)
243 throw new TypeError("Symbol.asyncIterator is not defined.");
244 var g = generator.apply(thisArg, _arguments || []), i, q = [];
245 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
246 function verb(n) { if (g[n])
247 i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
248 function resume(n, v) { try {
249 step(g[n](v));
250 }
251 catch (e) {
252 settle(q[0][3], e);
253 } }
254 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
255 function fulfill(value) { resume("next", value); }
256 function reject(value) { resume("throw", value); }
257 function settle(f, v) { if (f(v), q.shift(), q.length)
258 resume(q[0][0], q[0][1]); }
259 }
260 function __asyncDelegator(o) {
261 var i, p;
262 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
263 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
264 }
265 function __asyncValues(o) {
266 if (!Symbol.asyncIterator)
267 throw new TypeError("Symbol.asyncIterator is not defined.");
268 var m = o[Symbol.asyncIterator], i;
269 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
270 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
271 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
272 }
273 function __makeTemplateObject(cooked, raw) {
274 if (Object.defineProperty) {
275 Object.defineProperty(cooked, "raw", { value: raw });
276 }
277 else {
278 cooked.raw = raw;
279 }
280 return cooked;
281 }
282 ;
283 var __setModuleDefault = Object.create ? (function (o, v) {
284 Object.defineProperty(o, "default", { enumerable: true, value: v });
285 }) : function (o, v) {
286 o["default"] = v;
287 };
288 function __importStar(mod) {
289 if (mod && mod.__esModule)
290 return mod;
291 var result = {};
292 if (mod != null)
293 for (var k in mod)
294 if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
295 __createBinding(result, mod, k);
296 __setModuleDefault(result, mod);
297 return result;
298 }
299 function __importDefault(mod) {
300 return (mod && mod.__esModule) ? mod : { default: mod };
301 }
302 function __classPrivateFieldGet(receiver, state, kind, f) {
303 if (kind === "a" && !f)
304 throw new TypeError("Private accessor was defined without a getter");
305 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
306 throw new TypeError("Cannot read private member from an object whose class did not declare it");
307 return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
308 }
309 function __classPrivateFieldSet(receiver, state, value, kind, f) {
310 if (kind === "m")
311 throw new TypeError("Private method is not writable");
312 if (kind === "a" && !f)
313 throw new TypeError("Private accessor was defined without a setter");
314 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
315 throw new TypeError("Cannot write private member to an object whose class did not declare it");
316 return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
317 }
318
319 var MockState = /** @class */ (function (_super) {
320 __extends(MockState, _super);
321 function MockState() {
322 return _super.call(this, {}) || this;
323 }
324 return MockState;
325 }(rxjs.BehaviorSubject));
326 MockState.decorators = [
327 { type: core.Injectable }
328 ];
329 /** @nocollapse */
330 MockState.ctorParameters = function () { return []; };
331
332 var MOCK_SELECTORS = new core.InjectionToken('@ngrx/store Mock Selectors');
333
334 if (typeof afterEach === 'function') {
335 afterEach(function () {
336 try {
337 var mockStore = testing.TestBed.inject(MockStore);
338 if (mockStore) {
339 mockStore.resetSelectors();
340 }
341 // eslint-disable-next-line no-empty
342 }
343 catch (_a) { }
344 });
345 }
346 var MockStore = /** @class */ (function (_super) {
347 __extends(MockStore, _super);
348 function MockStore(state$, actionsObserver, reducerManager, initialState, mockSelectors) {
349 var e_1, _b;
350 if (mockSelectors === void 0) { mockSelectors = []; }
351 var _this = _super.call(this, state$, actionsObserver, reducerManager) || this;
352 _this.state$ = state$;
353 _this.initialState = initialState;
354 _this.selectors = new Map();
355 _this.resetSelectors();
356 _this.setState(_this.initialState);
357 _this.scannedActions$ = actionsObserver.asObservable();
358 try {
359 for (var mockSelectors_1 = __values(mockSelectors), mockSelectors_1_1 = mockSelectors_1.next(); !mockSelectors_1_1.done; mockSelectors_1_1 = mockSelectors_1.next()) {
360 var mockSelector = mockSelectors_1_1.value;
361 _this.overrideSelector(mockSelector.selector, mockSelector.value);
362 }
363 }
364 catch (e_1_1) { e_1 = { error: e_1_1 }; }
365 finally {
366 try {
367 if (mockSelectors_1_1 && !mockSelectors_1_1.done && (_b = mockSelectors_1.return)) _b.call(mockSelectors_1);
368 }
369 finally { if (e_1) throw e_1.error; }
370 }
371 return _this;
372 }
373 MockStore.prototype.setState = function (nextState) {
374 this.state$.next(nextState);
375 this.lastState = nextState;
376 };
377 MockStore.prototype.overrideSelector = function (selector, value) {
378 this.selectors.set(selector, value);
379 var resultSelector = typeof selector === 'string'
380 ? store.createSelector(function () { }, function () { return value; })
381 : selector;
382 resultSelector.setResult(value);
383 return resultSelector;
384 };
385 MockStore.prototype.resetSelectors = function () {
386 var e_2, _b;
387 try {
388 for (var _c = __values(this.selectors.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
389 var selector = _d.value;
390 if (typeof selector !== 'string') {
391 selector.release();
392 selector.clearResult();
393 }
394 }
395 }
396 catch (e_2_1) { e_2 = { error: e_2_1 }; }
397 finally {
398 try {
399 if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
400 }
401 finally { if (e_2) throw e_2.error; }
402 }
403 this.selectors.clear();
404 };
405 MockStore.prototype.select = function (selector, prop) {
406 if (typeof selector === 'string' && this.selectors.has(selector)) {
407 return new rxjs.BehaviorSubject(this.selectors.get(selector)).asObservable();
408 }
409 return _super.prototype.select.call(this, selector, prop);
410 };
411 MockStore.prototype.addReducer = function () {
412 /* noop */
413 };
414 MockStore.prototype.removeReducer = function () {
415 /* noop */
416 };
417 /**
418 * Refreshes the existing state.
419 */
420 MockStore.prototype.refreshState = function () {
421 if (this.lastState)
422 this.setState(Object.assign({}, this.lastState));
423 };
424 return MockStore;
425 }(store.Store));
426 MockStore.decorators = [
427 { type: core.Injectable }
428 ];
429 /** @nocollapse */
430 MockStore.ctorParameters = function () { return [
431 { type: MockState },
432 { type: store.ActionsSubject },
433 { type: store.ReducerManager },
434 { type: undefined, decorators: [{ type: core.Inject, args: [store.INITIAL_STATE,] }] },
435 { type: Array, decorators: [{ type: core.Inject, args: [MOCK_SELECTORS,] }] }
436 ]; };
437
438 var MockReducerManager = /** @class */ (function (_super) {
439 __extends(MockReducerManager, _super);
440 function MockReducerManager() {
441 return _super.call(this, function () { return undefined; }) || this;
442 }
443 MockReducerManager.prototype.addFeature = function (feature) {
444 /* noop */
445 };
446 MockReducerManager.prototype.addFeatures = function (feature) {
447 /* noop */
448 };
449 MockReducerManager.prototype.removeFeature = function (feature) {
450 /* noop */
451 };
452 MockReducerManager.prototype.removeFeatures = function (features) {
453 /* noop */
454 };
455 MockReducerManager.prototype.addReducer = function (key, reducer) {
456 /* noop */
457 };
458 MockReducerManager.prototype.addReducers = function (reducers) {
459 /* noop */
460 };
461 MockReducerManager.prototype.removeReducer = function (featureKey) {
462 /* noop */
463 };
464 MockReducerManager.prototype.removeReducers = function (featureKeys) {
465 /* noop */
466 };
467 return MockReducerManager;
468 }(rxjs.BehaviorSubject));
469 MockReducerManager.decorators = [
470 { type: core.Injectable }
471 ];
472 /** @nocollapse */
473 MockReducerManager.ctorParameters = function () { return []; };
474
475 /**
476 * @description
477 * Creates mock store providers.
478 *
479 * @param config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
480 * By default, `initialState` and `selectors` are not defined.
481 * @returns Mock store providers that can be used with both `TestBed.configureTestingModule` and `Injector.create`.
482 *
483 * @usageNotes
484 *
485 * **With `TestBed.configureTestingModule`**
486 *
487 * ```typescript
488 * describe('Books Component', () => {
489 * let store: MockStore;
490 *
491 * beforeEach(() => {
492 * TestBed.configureTestingModule({
493 * providers: [
494 * provideMockStore({
495 * initialState: { books: { entities: [] } },
496 * selectors: [
497 * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
498 * { selector: selectVisibleBooks, value: ['Book 1'] },
499 * ],
500 * }),
501 * ],
502 * });
503 *
504 * store = TestBed.inject(MockStore);
505 * });
506 * });
507 * ```
508 *
509 * **With `Injector.create`**
510 *
511 * ```typescript
512 * describe('Counter Component', () => {
513 * let injector: Injector;
514 * let store: MockStore;
515 *
516 * beforeEach(() => {
517 * injector = Injector.create({
518 * providers: [
519 * provideMockStore({ initialState: { counter: 0 } }),
520 * ],
521 * });
522 * store = injector.get(MockStore);
523 * });
524 * });
525 * ```
526 */
527 function provideMockStore(config) {
528 if (config === void 0) { config = {}; }
529 store.setNgrxMockEnvironment(true);
530 return [
531 {
532 provide: store.ActionsSubject,
533 useFactory: function () { return new store.ActionsSubject(); },
534 deps: [],
535 },
536 { provide: MockState, useFactory: function () { return new MockState(); }, deps: [] },
537 {
538 provide: MockReducerManager,
539 useFactory: function () { return new MockReducerManager(); },
540 deps: [],
541 },
542 { provide: store.INITIAL_STATE, useValue: config.initialState || {} },
543 { provide: MOCK_SELECTORS, useValue: config.selectors },
544 { provide: store.StateObservable, useExisting: MockState },
545 { provide: store.ReducerManager, useExisting: MockReducerManager },
546 {
547 provide: MockStore,
548 useFactory: mockStoreFactory,
549 deps: [
550 MockState,
551 store.ActionsSubject,
552 store.ReducerManager,
553 store.INITIAL_STATE,
554 MOCK_SELECTORS,
555 ],
556 },
557 { provide: store.Store, useExisting: MockStore },
558 ];
559 }
560 function mockStoreFactory(mockState, actionsSubject, reducerManager, initialState, mockSelectors) {
561 return new MockStore(mockState, actionsSubject, reducerManager, initialState, mockSelectors);
562 }
563 /**
564 * @description
565 * Creates mock store with all necessary dependencies outside of the `TestBed`.
566 *
567 * @param config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
568 * By default, `initialState` and `selectors` are not defined.
569 * @returns `MockStore<T>`
570 *
571 * @usageNotes
572 *
573 * ```typescript
574 * describe('Books Effects', () => {
575 * let store: MockStore;
576 *
577 * beforeEach(() => {
578 * store = getMockStore({
579 * initialState: { books: { entities: ['Book 1', 'Book 2', 'Book 3'] } },
580 * selectors: [
581 * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
582 * { selector: selectVisibleBooks, value: ['Book 1'] },
583 * ],
584 * });
585 * });
586 * });
587 * ```
588 */
589 function getMockStore(config) {
590 if (config === void 0) { config = {}; }
591 var injector = core.Injector.create({ providers: provideMockStore(config) });
592 return injector.get(MockStore);
593 }
594
595 /**
596 * Generated bundle index. Do not edit.
597 */
598
599 exports.MockReducerManager = MockReducerManager;
600 exports.MockState = MockState;
601 exports.MockStore = MockStore;
602 exports.getMockStore = getMockStore;
603 exports.provideMockStore = provideMockStore;
604 exports.ɵa = MOCK_SELECTORS;
605
606 Object.defineProperty(exports, '__esModule', { value: true });
607
608})));
609//# sourceMappingURL=ngrx-store-testing.umd.js.map