@@ -10,13 +10,19 @@ beforeEach(() => {
10
10
jest . clearAllMocks ( ) ;
11
11
} ) ;
12
12
13
- const spawnMock = async < EV > ( event : 'exit' | 'error' = 'exit' , emitValue ?: EV , delayMs = 200 ) => {
14
- const ee = new EventEmitter ( ) ;
13
+ class ChildMock extends EventEmitter {
14
+ public stdout = new EventEmitter ( ) ;
15
+ }
15
16
16
- const exitHandler = ( ) => ee . emit ( event , emitValue ) ;
17
+ const spawnMock = < EV > ( event : 'exit' | 'error' = 'exit' , emitValue ?: EV , delayMs = 200 ) => {
18
+ const child = new ChildMock ( ) ;
19
+
20
+ const exitHandler = ( ) => child . emit ( event , emitValue ) ;
17
21
delay ( delayMs ) . then ( exitHandler ) ;
18
22
19
- childProcessMocked . spawn . mockReturnValueOnce ( ee as ReturnType < typeof childProcess . spawn > ) ;
23
+ childProcessMocked . spawn . mockReturnValueOnce ( child as ReturnType < typeof childProcess . spawn > ) ;
24
+
25
+ return child ;
20
26
} ;
21
27
22
28
describe ( 'spawnCommand' , ( ) => {
@@ -51,6 +57,21 @@ describe('spawnCommand', () => {
51
57
52
58
throw new Error ( `command doesn't crashed` ) ;
53
59
} ) ;
60
+
61
+ test ( 'should return stdout result' , async ( ) => {
62
+ const child = spawnMock ( 'exit' ) ;
63
+ const chunks = [ 'Hello' , 'World' ] . map ( ( value ) => Buffer . from ( value , 'utf-8' ) ) ;
64
+
65
+ const spawnResult = spawnCommand ( command , args ) ;
66
+
67
+ for ( const chunk of chunks ) {
68
+ child . stdout . emit ( 'data' , chunk ) ;
69
+ }
70
+
71
+ const result = await spawnResult ;
72
+
73
+ expect ( result ) . toBe ( chunks . join ( '' ) ) ;
74
+ } ) ;
54
75
} ) ;
55
76
56
77
describe ( 'runCommand' , ( ) => {
0 commit comments