@@ -20,22 +20,28 @@ describe("memoize", () => {
2020 const memoized = memoize ( provider ) ;
2121 expect ( provider ) . toHaveBeenCalledTimes ( 0 ) ;
2222 // eslint-disable-next-line @typescript-eslint/no-unused-vars
23- for ( const index in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
23+ for ( const _ in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
2424 expect ( await memoized ( ) ) . toStrictEqual ( mockReturn ) ;
2525 expect ( provider ) . toHaveBeenCalledTimes ( 1 ) ;
2626 }
2727 } ) ;
2828
29- it ( "should always return the same promise" , ( ) => {
30- expect . assertions ( repeatTimes * 2 ) ;
31-
29+ it ( "should retry provider if previous provider is failed" , async ( ) => {
30+ provider
31+ . mockReset ( )
32+ . mockRejectedValueOnce ( "Error" )
33+ . mockResolvedValueOnce ( "Retry" )
34+ . mockRejectedValueOnce ( "Should not call 3rd time" ) ;
3235 const memoized = memoize ( provider ) ;
33- const result = memoized ( ) ;
34- // eslint-disable-next-line @typescript-eslint/no-unused-vars
35- for ( const index in [ ... Array ( repeatTimes ) . keys ( ) ] ) {
36- expect ( memoized ( ) ) . toStrictEqual ( result ) ;
37- expect ( provider ) . toHaveBeenCalledTimes ( 1 ) ;
36+ try {
37+ await memoized ( ) ;
38+ fail ( ) ;
39+ } catch ( e ) {
40+ expect ( e ) . toBe ( "Error" ) ;
3841 }
42+ expect ( await memoized ( ) ) . toBe ( "Retry" ) ;
43+ expect ( await memoized ( ) ) . toBe ( "Retry" ) ;
44+ expect ( provider ) . toBeCalledTimes ( 2 ) ;
3945 } ) ;
4046 } ) ;
4147
@@ -124,5 +130,24 @@ describe("memoize", () => {
124130 return requiresRefreshFalseTest ( ) ;
125131 } ) ;
126132 } ) ;
133+
134+ it ( "should retry provider if previous provider is failed" , async ( ) => {
135+ provider
136+ . mockReset ( )
137+ . mockRejectedValueOnce ( "Error" )
138+ . mockResolvedValueOnce ( "Retry" )
139+ . mockRejectedValueOnce ( "Should not call 3rd time" ) ;
140+ isExpired . mockReset ( ) . mockReturnValue ( false ) ;
141+ const memoized = memoize ( provider , isExpired ) ;
142+ try {
143+ await memoized ( ) ;
144+ fail ( ) ;
145+ } catch ( e ) {
146+ expect ( e ) . toBe ( "Error" ) ;
147+ }
148+ expect ( await memoized ( ) ) . toBe ( "Retry" ) ;
149+ expect ( await memoized ( ) ) . toBe ( "Retry" ) ;
150+ expect ( provider ) . toBeCalledTimes ( 2 ) ;
151+ } ) ;
127152 } ) ;
128153} ) ;
0 commit comments