Skip to content

Commit 803295b

Browse files
timdeschryverbrandonroberts
authored andcommitted
feat(store): add clearResult to reset a mock selector (#2270)
Closes #2244 BREAKING CHANGE: BEFORE: Using `mockSelector.setResult(undefined)` resulted in clearing the return value. AFTER: Using `mockSelector.setResult(undefined)` will set the return value of the selector to `undefined`. To reset the mock selector, use `mockSelector.clearResult()`.
1 parent 3a683cd commit 803295b

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

modules/store/src/selector.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type MemoizedProjection = {
77
memoized: AnyFn;
88
reset: () => void;
99
setResult: (result?: any) => void;
10+
clearResult: () => void;
1011
};
1112

1213
export type MemoizeFn = (t: AnyFn) => MemoizedProjection;
@@ -23,6 +24,7 @@ export interface MemoizedSelector<
2324
release(): void;
2425
projector: ProjectorFn;
2526
setResult: (result?: Result) => void;
27+
clearResult: () => void;
2628
}
2729

2830
export interface MemoizedSelectorWithProps<
@@ -34,6 +36,7 @@ export interface MemoizedSelectorWithProps<
3436
release(): void;
3537
projector: ProjectorFn;
3638
setResult: (result?: Result) => void;
39+
clearResult: () => void;
3740
}
3841

3942
export function isEqualCheck(a: any, b: any): boolean {
@@ -76,13 +79,17 @@ export function defaultMemoize(
7679
}
7780

7881
function setResult(result: any = undefined) {
79-
overrideResult = result;
82+
overrideResult = { result };
83+
}
84+
85+
function clearResult() {
86+
overrideResult = undefined;
8087
}
8188

8289
// tslint:disable-next-line:no-any anything could be the result.
8390
function memoized(): any {
8491
if (overrideResult !== undefined) {
85-
return overrideResult;
92+
return overrideResult.result;
8693
}
8794

8895
if (!lastArguments) {
@@ -107,7 +114,7 @@ export function defaultMemoize(
107114
return newResult;
108115
}
109116

110-
return { memoized, reset, setResult };
117+
return { memoized, reset, setResult, clearResult };
111118
}
112119

113120
export function createSelector<State, S1, Result>(
@@ -590,6 +597,7 @@ export function createSelectorFactory(
590597
release,
591598
projector: memoizedProjector.memoized,
592599
setResult: memoizedState.setResult,
600+
clearResult: memoizedState.clearResult,
593601
});
594602
};
595603
}

modules/store/testing/src/mock_store.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class MockStore<T> extends Store<T> {
102102
MockStore.selectors.forEach((_, selector) => {
103103
if (typeof selector !== 'string') {
104104
selector.release();
105-
selector.setResult();
105+
selector.clearResult();
106106
}
107107
});
108108

0 commit comments

Comments
 (0)