@@ -130,31 +130,26 @@ describe("memoize", () => {
130
130
} ) ;
131
131
132
132
describe ( "when called with forceRefresh set to `true`" , ( ) => {
133
- const isExpiredFalseTest = async ( requiresRefresh ?: any ) => {
133
+ it ( "should reinvoke the underlying provider even if isExpired returns false" , async ( ) => {
134
134
const memoized = memoize ( provider , isExpired , requiresRefresh ) ;
135
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
136
- for ( const index in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
137
- expect ( await memoized ( ) ) . toEqual ( mockReturn ) ;
138
- }
139
-
140
- expect ( isExpired ) . toHaveBeenCalledTimes ( repeatTimes ) ;
141
- if ( requiresRefresh ) {
142
- expect ( requiresRefresh ) . toHaveBeenCalledTimes ( repeatTimes ) ;
143
- }
144
- expect ( provider ) . toHaveBeenCalledTimes ( repeatTimes + 1 ) ;
145
- } ;
146
-
147
- it ( "should reinvoke the underlying provider even if isExpired returns false" , ( ) => {
148
135
isExpired . mockReturnValue ( false ) ;
136
+ for ( const _ in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
137
+ expect ( await memoized ( { forceRefresh : true } ) ) . toEqual ( mockReturn ) ;
138
+ }
139
+ expect ( provider ) . toHaveBeenCalledTimes ( repeatTimes ) ;
149
140
} ) ;
150
141
151
- it ( "when requiresRefresh returns true" , ( ) => {
152
- requiresRefresh . mockReturnValue ( true ) ;
153
- return isExpiredTrueTest ( requiresRefresh ) ;
142
+ it ( "should reinvoke the underlying provider even if requiresRefresh returns false" , async ( ) => {
143
+ const memoized = memoize ( provider , isExpired , requiresRefresh ) ;
144
+ requiresRefresh . mockReturnValue ( false ) ;
145
+ for ( const _ in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
146
+ expect ( await memoized ( { forceRefresh : true } ) ) . toEqual ( mockReturn ) ;
147
+ }
148
+ expect ( provider ) . toHaveBeenCalledTimes ( repeatTimes ) ;
154
149
} ) ;
155
150
} ) ;
156
151
157
- describe ( "should return the same promise for invocations 2-infinity if `requiresRefresh` returns `false`" , ( ) => {
152
+ describe ( "when `requiresRefresh` returns `false`" , ( ) => {
158
153
const requiresRefreshFalseTest = async ( ) => {
159
154
const memoized = memoize ( provider , isExpired , requiresRefresh ) ;
160
155
const result = memoized ( ) ;
@@ -169,14 +164,22 @@ describe("memoize", () => {
169
164
expect ( isExpired ) . not . toHaveBeenCalled ( ) ;
170
165
} ;
171
166
172
- it ( "when isExpired returns true" , ( ) => {
167
+ it ( "should return the same promise for invocations 2-infinity if isExpired returns true" , ( ) => {
173
168
return requiresRefreshFalseTest ( ) ;
174
169
} ) ;
175
170
176
- it ( "when isExpired returns false" , ( ) => {
171
+ it ( "should return the same promise for invocations 2-infinity if isExpired returns false" , ( ) => {
177
172
isExpired . mockReturnValue ( false ) ;
178
173
return requiresRefreshFalseTest ( ) ;
179
174
} ) ;
175
+
176
+ it ( "should re-evaluate `requiresRefresh` after force refresh" , async ( ) => {
177
+ const memoized = memoize ( provider , isExpired , requiresRefresh ) ;
178
+ for ( const _ in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
179
+ expect ( await memoized ( { forceRefresh : true } ) ) . toStrictEqual ( mockReturn ) ;
180
+ }
181
+ expect ( requiresRefresh ) . toBeCalledTimes ( repeatTimes ) ;
182
+ } ) ;
180
183
} ) ;
181
184
182
185
describe ( "should not make extra request for concurrent calls" , ( ) => {
0 commit comments