@@ -4,8 +4,17 @@ import { Heart } from "../../../src/node/heart"
4
4
import { clean , mockLogger , tmpdir } from "../../utils/helpers"
5
5
6
6
describe ( "Heart" , ( ) => {
7
- function isFakeActive ( resolveTo : boolean ) : ( ) => Promise < boolean > {
8
- return ( ) => new Promise ( ( resolve ) => setTimeout ( ( ) => resolve ( resolveTo ) , 500 ) )
7
+ function isFakeActive ( resolveTo : boolean , rejectMessage ?: string ) : ( ) => Promise < boolean > {
8
+ return ( ) =>
9
+ new Promise ( ( resolve , reject ) =>
10
+ setTimeout ( ( ) => {
11
+ if ( rejectMessage ) {
12
+ reject ( rejectMessage )
13
+ return
14
+ }
15
+ resolve ( resolveTo )
16
+ } , 100 ) ,
17
+ )
9
18
}
10
19
const testName = "heartTests"
11
20
let testDir = ""
@@ -18,6 +27,7 @@ describe("Heart", () => {
18
27
19
28
afterEach ( ( ) => {
20
29
jest . clearAllMocks ( )
30
+ jest . restoreAllMocks ( )
21
31
} )
22
32
23
33
it ( "should write to a file when given a valid file path" , async ( ) => {
@@ -50,7 +60,22 @@ describe("Heart", () => {
50
60
expect ( logger . warn ) . toHaveBeenCalled ( )
51
61
} catch ( _e ) { }
52
62
heart . dispose ( )
53
- // expect(logger.warn).toHaveBeenCalledWith(`hi`)
63
+ } )
64
+
65
+ // TODO@jsjoeio make isActive reject, check for warning
66
+ it . only ( "should log a warning when isActive rejects" , async ( ) => {
67
+ jest . spyOn ( global . Date , "now" ) . mockImplementationOnce ( ( ) => 60002 )
68
+ const rejectMessage = "oh no"
69
+ const heart = new Heart ( `${ testDir } /path.txt` , isFakeActive ( false , rejectMessage ) )
70
+ try {
71
+ heart . beat ( )
72
+ // HACK@jsjoeio - beat has some async logic but is not an async method
73
+ // Therefore, we have to create an artificial wait in order to make sure
74
+ // all async code has completed before asserting
75
+ } catch ( _e ) { }
76
+ await new Promise ( ( r ) => setTimeout ( r , 200 ) )
77
+ expect ( logger . warn ) . toBeCalled ( )
78
+ heart . dispose ( )
54
79
} )
55
80
56
81
it ( "should let you know if the beat is alive" , ( ) => {
0 commit comments