1- import { exec } from 'node:child_process' ;
1+ import { exec , spawn } from 'node:child_process' ;
22import path from 'node:path' ;
3+ import { after } from 'node:test' ;
34import fse from 'fs-extra' ;
45import { awaitFileChanges , awaitFileExists } from 'test-helper' ;
56import { describe , expect , test } from 'vitest' ;
@@ -59,46 +60,66 @@ describe('build --watch should handle add / change / unlink', async () => {
5960 const tempSrcPath = path . join ( __dirname , 'test-temp-src' ) ;
6061 await fse . remove ( tempSrcPath ) ;
6162 await fse . remove ( path . join ( __dirname , 'dist' ) ) ;
62- await fse . copy ( path . join ( __dirname , 'src' ) , tempSrcPath ) ;
63+ await fse . copy ( path . join ( __dirname , 'src' ) , path . resolve ( tempSrcPath ) ) ;
6364 const tempConfigFile = path . join ( __dirname , 'test-temp-rslib.config.mjs' ) ;
6465 await fse . remove ( tempConfigFile ) ;
6566 fse . outputFileSync (
6667 tempConfigFile ,
6768 `import { defineConfig } from '@rslib/core';
68- import { generateBundleEsmConfig } from 'test-helper';
69-
70- export default defineConfig({
71- lib: [
72- generateBundleEsmConfig({
73- source: {
74- entry: {
75- index: 'test-temp-src',
76- },
77- },
78- bundle: false,
79- }),
80- ],
81- });
82- ` ,
69+ import { generateBundleEsmConfig, generateBundleCjsConfig } from 'test-helper';
70+
71+ export default defineConfig({
72+ lib: [
73+ generateBundleEsmConfig({
74+ bundle: false,
75+ }),
76+ generateBundleCjsConfig({
77+ bundle: false,
78+ }),
79+ ],
80+ source: {
81+ entry: {
82+ index: ['./test-temp-src/**'],
83+ },
84+ },
85+ });
86+ ` ,
8387 ) ;
8488
8589 const srcIndexFile = path . join ( tempSrcPath , 'index.ts' ) ;
86- const srcFooFile = path . join ( tempSrcPath , 'foo.js' ) ;
90+ const srcFooFile = path . join ( tempSrcPath , 'foo.ts' ) ;
91+ const srcFoo2File = path . join ( tempSrcPath , 'foo2.ts' ) ;
92+ const distIndexFile = path . join ( __dirname , 'dist/esm/index.js' ) ;
8793 const distFooFile = path . join ( __dirname , 'dist/esm/foo.js' ) ;
94+ const distFoo2File = path . join ( __dirname , 'dist/esm/foo2.js' ) ;
95+
96+ const child = spawn (
97+ 'npx' ,
98+ [ 'rslib' , 'build' , '--watch' , '-c' , tempConfigFile ] ,
99+ {
100+ cwd : __dirname ,
101+ stdio : 'inherit' ,
102+ shell : true ,
103+ } ,
104+ ) ;
88105
89- const process = exec ( `npx rslib build --watch -c ${ tempConfigFile } ` , {
90- cwd : __dirname ,
91- } ) ;
106+ await awaitFileExists ( distIndexFile ) ;
92107
93- // add
94108 fse . outputFileSync ( srcFooFile , `export const foo = 'foo';` ) ;
95- await awaitFileExists ( distFooFile ) ;
109+ fse . outputFileSync ( srcFoo2File , `export const foo2 = 'foo2';` ) ;
110+ await awaitFileExists ( distFoo2File ) ;
96111 const content1 = await fse . readFile ( distFooFile , 'utf-8' ) ;
97112 expect ( content1 ! ) . toMatchInlineSnapshot ( `
98113 "const foo = 'foo';
99114 export { foo };
100115 "
101116 ` ) ;
117+ const content2 = await fse . readFile ( distFoo2File , 'utf-8' ) ;
118+ expect ( content2 ! ) . toMatchInlineSnapshot ( `
119+ "const foo2 = 'foo2';
120+ export { foo2 };
121+ "
122+ ` ) ;
102123
103124 // unlink
104125 // Following "change" cases won't succeed if error is thrown in this step.
@@ -108,13 +129,15 @@ describe('build --watch should handle add / change / unlink', async () => {
108129 const wait = await awaitFileChanges ( distFooFile ) ;
109130 fse . outputFileSync ( srcFooFile , `export const foo = 'foo1';` ) ;
110131 await wait ( ) ;
111- const content2 = await fse . readFile ( distFooFile , 'utf-8' ) ;
112- expect ( content2 ! ) . toMatchInlineSnapshot ( `
132+ const content3 = await fse . readFile ( distFooFile , 'utf-8' ) ;
133+ expect ( content3 ! ) . toMatchInlineSnapshot ( `
113134 "const foo = 'foo1';
114135 export { foo };
115136 "
116137 ` ) ;
117138
118- process . kill ( ) ;
139+ after ( ( ) => {
140+ child . kill ( ) ;
141+ } ) ;
119142 } ) ;
120143} ) ;
0 commit comments