1
1
import { DeferredPromise } from "../../src/deferred-promise.js" ;
2
2
3
3
describe ( "DeferredPromise" , ( ) => {
4
+ beforeEach ( ( ) => {
5
+ jest . useFakeTimers ( ) ;
6
+ } ) ;
7
+ afterEach ( ( ) => {
8
+ jest . useRealTimers ( ) ;
9
+ } ) ;
10
+
4
11
it ( "should resolve with the correct value" , async ( ) => {
5
12
const deferred = new DeferredPromise < string > ( ( resolve ) => {
6
13
resolve ( "resolved value" ) ;
@@ -18,44 +25,47 @@ describe("DeferredPromise", () => {
18
25
} ) ;
19
26
20
27
it ( "should timeout if not resolved or rejected within the specified time" , async ( ) => {
21
- const deferred = new DeferredPromise < string > ( ( ) => {
22
- // Do not resolve or reject
23
- } , 10 ) ;
28
+ const deferred = new DeferredPromise < string > (
29
+ ( ) => {
30
+ // Do not resolve or reject
31
+ } ,
32
+ { timeout : 100 , onTimeout : ( resolve , reject ) => reject ( new Error ( "Promise timed out" ) ) }
33
+ ) ;
34
+
35
+ jest . advanceTimersByTime ( 100 ) ;
24
36
25
37
await expect ( deferred ) . rejects . toThrow ( "Promise timed out" ) ;
26
38
} ) ;
27
39
28
40
it ( "should clear the timeout when resolved" , async ( ) => {
29
- jest . useFakeTimers ( ) ;
30
-
31
- const deferred = new DeferredPromise < string > ( ( resolve ) => {
32
- setTimeout ( ( ) => resolve ( "resolved value" ) , 100 ) ;
33
- } , 200 ) ;
41
+ const deferred = new DeferredPromise < string > (
42
+ ( resolve ) => {
43
+ setTimeout ( ( ) => resolve ( "resolved value" ) , 100 ) ;
44
+ } ,
45
+ { timeout : 200 }
46
+ ) ;
34
47
35
48
const promise = deferred . then ( ( value ) => {
36
49
expect ( value ) . toBe ( "resolved value" ) ;
37
50
} ) ;
38
51
39
52
jest . advanceTimersByTime ( 100 ) ;
40
53
await promise ;
41
-
42
- jest . useRealTimers ( ) ;
43
54
} ) ;
44
55
45
56
it ( "should clear the timeout when rejected" , async ( ) => {
46
- jest . useFakeTimers ( ) ;
47
-
48
- const deferred = new DeferredPromise < string > ( ( _ , reject ) => {
49
- setTimeout ( ( ) => reject ( new Error ( "rejected error" ) ) , 100 ) ;
50
- } , 200 ) ;
57
+ const deferred = new DeferredPromise < string > (
58
+ ( _ , reject ) => {
59
+ setTimeout ( ( ) => reject ( new Error ( "rejected error" ) ) , 100 ) ;
60
+ } ,
61
+ { timeout : 200 , onTimeout : ( resolve , reject ) => reject ( new Error ( "Promise timed out" ) ) }
62
+ ) ;
51
63
52
64
const promise = deferred . catch ( ( error ) => {
53
65
expect ( error ) . toEqual ( new Error ( "rejected error" ) ) ;
54
66
} ) ;
55
67
56
68
jest . advanceTimersByTime ( 100 ) ;
57
69
await promise ;
58
-
59
- jest . useRealTimers ( ) ;
60
70
} ) ;
61
71
} ) ;
0 commit comments