@@ -28,12 +28,18 @@ interface TestCase {
28
28
wantWorkerError ?: boolean ;
29
29
wantDependenciesError ?: boolean ;
30
30
wantInstallationError ?: boolean ;
31
- } ;
31
+ }
32
+
33
+ interface E2EFixtureTest extends TestCase {
34
+ dir : string ;
35
+ tempDir : string ;
36
+ packageManager : PackageManager ;
37
+ }
32
38
33
39
const TIMEOUT = 120_000 ;
34
40
35
41
const testCases : TestCase [ ] = process . env . MOD
36
- ? allTestCases . filter ( ( { name } ) => process . env . MOD === name )
42
+ ? allTestCases . filter ( ( { id } ) => process . env . MOD === id )
37
43
: allTestCases ;
38
44
39
45
let options : E2EOptions ;
@@ -53,39 +59,25 @@ logger.loggerLevel = options.logLevel;
53
59
54
60
if ( testCases . length > 0 ) {
55
61
describe . concurrent ( "bundling" , async ( ) => {
56
- beforeAll ( async ( ) => {
57
- for ( let testCase of testCases ) {
58
- const { name } = testCase ;
59
- const fixtureDir = resolve ( join ( process . cwd ( ) , "e2e/fixtures" , name ) ) ;
60
- await rm ( resolve ( join ( fixtureDir , ".trigger" ) ) , { force : true , recursive : true } ) ;
61
- await rimraf ( join ( fixtureDir , "**/node_modules/**" ) , {
62
- glob : true ,
63
- } ) ;
64
- const packageManager : PackageManager = await parsePackageManager ( options , fixtureDir ) ;
65
-
66
- if (
67
- packageManager === "npm" &&
68
- ( existsSync ( resolve ( join ( fixtureDir , "yarn.lock" ) ) ) ||
69
- existsSync ( resolve ( join ( fixtureDir , "yarn.lock.copy" ) ) ) )
70
- ) {
71
- // `npm ci` & `npm install` will update an existing yarn.lock
72
- try {
73
- await rename (
74
- resolve ( join ( fixtureDir , "yarn.lock" ) ) ,
75
- resolve ( join ( fixtureDir , "yarn.lock.copy" ) )
76
- ) ;
77
- } catch ( e ) {
78
- await rename (
79
- resolve ( join ( fixtureDir , "yarn.lock.copy" ) ) ,
80
- resolve ( join ( fixtureDir , "yarn.lock" ) )
81
- ) ;
82
- }
62
+ beforeEach < E2EFixtureTest > ( async ( { dir, packageManager } ) => {
63
+ await rimraf ( join ( dir , "**/node_modules/**" ) , {
64
+ glob : true ,
65
+ } ) ;
66
+ if (
67
+ packageManager === "npm" &&
68
+ ( existsSync ( resolve ( join ( dir , "yarn.lock" ) ) ) ||
69
+ existsSync ( resolve ( join ( dir , "yarn.lock.copy" ) ) ) )
70
+ ) {
71
+ // `npm ci` & `npm install` will update an existing yarn.lock
72
+ try {
73
+ await rename ( resolve ( join ( dir , "yarn.lock" ) ) , resolve ( join ( dir , "yarn.lock.copy" ) ) ) ;
74
+ } catch ( e ) {
75
+ await rename ( resolve ( join ( dir , "yarn.lock.copy" ) ) , resolve ( join ( dir , "yarn.lock" ) ) ) ;
83
76
}
84
77
}
85
78
} ) ;
86
79
87
- afterEach ( ( ) => {
88
- delete global . tempDir ;
80
+ afterEach < E2EFixtureTest > ( async ( { dir, packageManager } ) => {
89
81
delete global . resolvedConfig ;
90
82
91
83
delete global . entryPointMetaOutput ;
@@ -94,50 +86,54 @@ if (testCases.length > 0) {
94
86
delete global . workerOutputFile ;
95
87
96
88
delete global . dependencies ;
97
- } ) ;
98
89
99
- afterAll ( async ( ) => {
100
- for ( let testCase of testCases ) {
101
- const { name } = testCase ;
102
- const fixtureDir = resolve ( join ( process . cwd ( ) , "e2e/fixtures" , name ) ) ;
103
- const packageManager : PackageManager = await parsePackageManager ( options , fixtureDir ) ;
104
-
105
- if ( packageManager === "npm" ) {
106
- try {
107
- await rename (
108
- resolve ( join ( fixtureDir , "yarn.lock.copy" ) ) ,
109
- resolve ( join ( fixtureDir , "yarn.lock" ) )
110
- ) ;
111
- } catch { }
112
- }
90
+ if ( packageManager === "npm" ) {
91
+ try {
92
+ await rename ( resolve ( join ( dir , "yarn.lock.copy" ) ) , resolve ( join ( dir , "yarn.lock" ) ) ) ;
93
+ } catch { }
113
94
}
114
95
} ) ;
115
96
116
97
for ( let testCase of testCases ) {
117
- const {
118
- name,
119
- skipTypecheck,
120
- wantConfigNotFoundError,
121
- wantConfigInvalidError,
122
- wantCompilationError,
123
- wantWorkerError,
124
- wantDependenciesError,
125
- wantInstallationError,
126
- } = testCase ;
127
- const fixtureDir = resolve ( join ( process . cwd ( ) , "e2e/fixtures" , name ) ) ;
128
- let shouldSkipFixture : boolean = false ;
129
- const packageManager : PackageManager = await parsePackageManager ( options , fixtureDir ) ;
130
-
131
- if ( options . packageManager )
132
- shouldSkipFixture = ! existsSync ( resolve ( fixtureDir , LOCKFILES [ options . packageManager ] ) ) ;
133
-
134
- test . skipIf ( shouldSkipFixture ) (
135
- `fixture '${ name } '` ,
136
- async ( ) => {
98
+ test . extend < E2EFixtureTest > ( {
99
+ ...testCase ,
100
+ dir : async ( { id } , use ) => await use ( resolve ( join ( process . cwd ( ) , "e2e/fixtures" , id ) ) ) ,
101
+ packageManager : async ( { dir } , use ) => await use ( await parsePackageManager ( options , dir ) ) ,
102
+ tempDir : async ( { dir } , use ) => {
103
+ const existingTempDir = resolve ( join ( dir , ".trigger" ) ) ;
104
+
105
+ if ( existsSync ( existingTempDir ) ) {
106
+ await rm ( existingTempDir , { force : true , recursive : true } ) ;
107
+ }
108
+ await use ( ( await mkdir ( join ( dir , ".trigger" ) , { recursive : true } ) ) as string ) ;
109
+ } ,
110
+ } ) (
111
+ `fixture '${ testCase . id } '` ,
112
+ { timeout : TIMEOUT } ,
113
+ async ( {
114
+ dir,
115
+ packageManager,
116
+ skip,
117
+ skipTypecheck,
118
+ tempDir,
119
+ wantCompilationError,
120
+ wantConfigInvalidError,
121
+ wantConfigNotFoundError,
122
+ wantDependenciesError,
123
+ wantInstallationError,
124
+ wantWorkerError,
125
+ } ) => {
126
+ if (
127
+ options . packageManager &&
128
+ ! existsSync ( resolve ( dir , LOCKFILES [ options . packageManager ] ) )
129
+ ) {
130
+ skip ( ) ;
131
+ }
132
+
137
133
await expect (
138
134
( async ( ) => {
139
135
if ( [ "pnpm" , "yarn" ] . includes ( packageManager ) ) {
140
- const buffer = readFileSync ( resolve ( join ( fixtureDir , "package.json" ) ) , "utf8" ) ;
136
+ const buffer = readFileSync ( resolve ( join ( dir , "package.json" ) ) , "utf8" ) ;
141
137
const pkgJSON = JSON . parse ( buffer . toString ( ) ) ;
142
138
const version = pkgJSON . engines [ packageManager ] ;
143
139
console . log (
@@ -147,7 +143,7 @@ if (testCases.length > 0) {
147
143
"corepack" ,
148
144
[ "use" , `${ packageManager } @${ version } ` ] ,
149
145
{
150
- cwd : fixtureDir ,
146
+ cwd : dir ,
151
147
}
152
148
) ;
153
149
console . log ( stdout ) ;
@@ -157,8 +153,8 @@ if (testCases.length > 0) {
157
153
packageManager ,
158
154
installArgs ( packageManager ) ,
159
155
{
160
- cwd : fixtureDir ,
161
- NODE_PATH : resolve ( join ( fixtureDir , "node_modules" ) ) ,
156
+ cwd : dir ,
157
+ NODE_PATH : resolve ( join ( dir , "node_modules" ) ) ,
162
158
}
163
159
) ;
164
160
console . log ( stdout ) ;
@@ -170,7 +166,7 @@ if (testCases.length > 0) {
170
166
171
167
const configExpect = expect (
172
168
( async ( ) => {
173
- global . resolvedConfig = await readConfig ( fixtureDir , { cwd : fixtureDir } ) ;
169
+ global . resolvedConfig = await readConfig ( dir , { cwd : dir } ) ;
174
170
} ) ( ) ,
175
171
wantConfigNotFoundError || wantConfigInvalidError
176
172
? "does not resolve config"
@@ -191,11 +187,6 @@ if (testCases.length > 0) {
191
187
192
188
expect ( global . resolvedConfig ) . not . toBe ( "error" ) ;
193
189
194
- global . tempDir = await mkdir (
195
- join ( ( global . resolvedConfig as ReadConfigFileResult ) . config . projectDir , ".trigger" ) ,
196
- { recursive : true }
197
- ) ;
198
-
199
190
if ( ! skipTypecheck ) {
200
191
await expect (
201
192
( async ( ) =>
@@ -213,7 +204,7 @@ if (testCases.length > 0) {
213
204
entryPointOutputFile,
214
205
} = await compile ( {
215
206
resolvedConfig : global . resolvedConfig ! ,
216
- tempDir : global . tempDir ! ,
207
+ tempDir,
217
208
} ) ;
218
209
global . entryPointMetaOutput = entryPointMetaOutput ;
219
210
global . entryPointOutputFile = entryPointOutputFile ;
@@ -236,7 +227,7 @@ if (testCases.length > 0) {
236
227
entryPointMetaOutput : global . entryPointMetaOutput ! ,
237
228
metaOutput : global . workerMetaOutput ! ,
238
229
resolvedConfig : global . resolvedConfig ! ,
239
- tempDir : global . tempDir ! ,
230
+ tempDir,
240
231
packageManager,
241
232
} ) ;
242
233
global . dependencies = dependencies ;
@@ -255,7 +246,7 @@ if (testCases.length > 0) {
255
246
( async ( ) => {
256
247
await createContainerFile ( {
257
248
resolvedConfig : global . resolvedConfig ! ,
258
- tempDir : global . tempDir ! ,
249
+ tempDir,
259
250
} ) ;
260
251
} ) ( ) ,
261
252
"copies postinstall command into Containerfile.prod"
@@ -284,8 +275,8 @@ if (testCases.length > 0) {
284
275
"--strict-peer-deps=false" ,
285
276
] ,
286
277
{
287
- cwd : global . tempDir ! ,
288
- NODE_PATH : resolve ( join ( global . tempDir ! , "node_modules" ) ) ,
278
+ cwd : tempDir ,
279
+ NODE_PATH : resolve ( join ( tempDir , "node_modules" ) ) ,
289
280
}
290
281
) ;
291
282
console . log ( stdout ) ;
@@ -304,10 +295,10 @@ if (testCases.length > 0) {
304
295
const workerStartExpect = expect (
305
296
( async ( ) => {
306
297
const { stdout, stderr } = await execaNode ( "worker.js" , {
307
- cwd : global . tempDir ! ,
298
+ cwd : tempDir ,
308
299
env : {
309
300
// Since we don't start the worker in a container, limit node resolution algorithm to the '.trigger/node_modules' folder
310
- NODE_PATH : resolve ( join ( global . tempDir ! , "node_modules" ) ) ,
301
+ NODE_PATH : resolve ( join ( tempDir , "node_modules" ) ) ,
311
302
} ,
312
303
} ) ;
313
304
console . log ( stdout ) ;
@@ -322,8 +313,7 @@ if (testCases.length > 0) {
322
313
}
323
314
324
315
await workerStartExpect . resolves . not . toThrowError ( ) ;
325
- } ,
326
- { timeout : TIMEOUT }
316
+ }
327
317
) ;
328
318
}
329
319
} ) ;
0 commit comments