1
- const exec = require ( 'child_process' ) . exec ;
1
+ const spawn = require ( 'child_process' ) . spawn ;
2
2
const fs = require ( 'fs-extra' ) ;
3
3
const path = require ( 'path' ) ;
4
4
5
5
const strapiBin = path . resolve ( './packages/strapi/bin/strapi.js' ) ;
6
6
const appName = 'testApp' ;
7
+ let testExitCode = 0 ;
7
8
let appStart ;
8
9
9
10
const databases = {
10
- mongo : `--dbclient=mongo --dbhost=127.0.0.1 --dbport=27017 --dbname=strapi-test-${ new Date ( ) . getTime ( ) } --dbusername="" --dbpassword="" ` ,
11
- postgres : ` --dbclient=postgres --dbhost=127.0.0.1 --dbport=5432 --dbname=strapi-test --dbusername="" --dbpassword=""` ,
12
- mysql : ` --dbclient=mysql --dbhost=127.0.0.1 --dbport=3306 --dbname=strapi-test --dbusername=" root" --dbpassword=" root"`
11
+ mongo : `--dbclient=mongo --dbhost=127.0.0.1 --dbport=27017 --dbname=strapi-test-${ new Date ( ) . getTime ( ) } --dbusername= --dbpassword=` ,
12
+ postgres : ' --dbclient=postgres --dbhost=127.0.0.1 --dbport=5432 --dbname=strapi-test --dbusername= --dbpassword=' ,
13
+ mysql : ' --dbclient=mysql --dbhost=127.0.0.1 --dbport=3306 --dbname=strapi-test --dbusername=root --dbpassword=root'
13
14
} ;
14
15
15
16
const { runCLI : jest } = require ( 'jest-cli/build/cli' ) ;
@@ -29,32 +30,28 @@ const main = async () => {
29
30
30
31
const generate = ( database ) => {
31
32
return new Promise ( ( resolve , reject ) => {
32
- const appCreation = exec (
33
- `node ${ strapiBin } new ${ appName } --dev ${ database } ` ,
34
- ) ;
33
+ const appCreation = spawn ( 'node' , `${ strapiBin } new ${ appName } --dev ${ database } ` . split ( ' ' ) , { detached : true } ) ;
35
34
36
35
appCreation . stdout . on ( 'data' , data => {
37
36
console . log ( data . toString ( ) ) ;
38
37
39
38
if ( data . includes ( 'is ready at' ) ) {
40
- appCreation . kill ( ) ;
39
+ process . kill ( - appCreation . pid ) ;
41
40
return resolve ( ) ;
42
41
}
43
42
44
43
if ( data . includes ( 'Database connection has failed' ) ) {
45
- appCreation . kill ( ) ;
46
- return reject ( ) ;
44
+ process . kill ( - appCreation . pid ) ;
45
+ return reject ( new Error ( 'Database connection has failed' ) ) ;
47
46
}
48
47
} ) ;
49
48
} ) ;
50
49
} ;
51
50
52
51
const start = ( ) => {
53
- return new Promise ( ( resolve ) => {
52
+ return new Promise ( ( resolve , reject ) => {
54
53
try {
55
- appStart = exec (
56
- `node ${ strapiBin } start ${ appName } ` ,
57
- ) ;
54
+ appStart = spawn ( 'node' , `${ strapiBin } start ${ appName } ` . split ( ' ' ) , { detached : true } ) ;
58
55
59
56
appStart . stdout . on ( 'data' , data => {
60
57
console . log ( data . toString ( ) ) ;
@@ -65,7 +62,10 @@ const main = async () => {
65
62
} ) ;
66
63
67
64
} catch ( e ) {
68
- console . error ( e ) ;
65
+ if ( typeof appStart !== 'undefined' ) {
66
+ process . kill ( - appStart . pid ) ;
67
+ }
68
+ return reject ( e ) ;
69
69
}
70
70
} ) ;
71
71
} ;
@@ -94,17 +94,22 @@ const main = async () => {
94
94
} ;
95
95
96
96
const testProcess = async ( database ) => {
97
- await clean ( ) ;
98
- await generate ( database ) ;
99
- await start ( ) ;
100
- await test ( ) ;
101
-
102
- appStart . kill ( ) ;
97
+ try {
98
+ await clean ( ) ;
99
+ await generate ( database ) ;
100
+ await start ( ) ;
101
+ await test ( ) ;
102
+ process . kill ( - appStart . pid ) ;
103
+ } catch ( e ) {
104
+ console . error ( e . message ) ;
105
+ testExitCode = 1 ;
106
+ }
103
107
} ;
104
108
105
109
await testProcess ( databases . mongo ) ;
106
110
await testProcess ( databases . postgres ) ;
107
111
await testProcess ( databases . mysql ) ;
112
+ process . exit ( testExitCode ) ;
108
113
} ;
109
114
110
115
main ( ) ;
0 commit comments