codeceptjs 4.0.2-beta.15 → 4.0.2-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -119,7 +119,12 @@ let config
119
119
  // Load test and run
120
120
  initPromise = (async function () {
121
121
  try {
122
- console.log(`[Worker ${workerIndex}] Starting initialization...`)
122
+ // Add staggered delay at the very start to prevent resource conflicts
123
+ // Longer delay for browser initialization conflicts
124
+ const delay = (workerIndex - 1) * 2000 // 0ms, 2s, 4s, etc.
125
+ if (delay > 0) {
126
+ await new Promise(resolve => setTimeout(resolve, delay))
127
+ }
123
128
 
124
129
  // Import modules dynamically to avoid ES Module loader race conditions in Node 22.x
125
130
  const eventModule = await import('../../event.js')
@@ -128,8 +133,6 @@ initPromise = (async function () {
128
133
  const coreUtilsModule = await import('../../utils.js')
129
134
  const CodeceptModule = await import('../../codecept.js')
130
135
 
131
- console.log(`[Worker ${workerIndex}] Modules imported`)
132
-
133
136
  event = eventModule.default
134
137
  container = containerModule.default
135
138
  getConfig = utilsModule.getConfig
@@ -139,23 +142,17 @@ initPromise = (async function () {
139
142
 
140
143
  const overrideConfigs = tryOrDefault(() => JSON.parse(options.override), {})
141
144
 
142
- console.log(`[Worker ${workerIndex}] Loading config...`)
143
-
144
145
  let baseConfig
145
146
  try {
146
147
  // IMPORTANT: await is required here since getConfig is async
147
148
  baseConfig = await getConfig(options.config || testRoot)
148
- console.log(`[Worker ${workerIndex}] Config loaded successfully`)
149
149
  } catch (configErr) {
150
150
  process.stderr.write(`[Worker ${workerIndex}] FAILED loading config: ${configErr.message}\n`)
151
151
  process.stderr.write(`${configErr.stack}\n`)
152
- // Ensure error is written before exit
153
152
  await new Promise(resolve => setTimeout(resolve, 100))
154
153
  process.exit(1)
155
154
  }
156
155
 
157
- console.log(`[Worker ${workerIndex}] Config loaded, creating Codecept...`)
158
-
159
156
  // important deep merge so dynamic things e.g. functions on config are not overridden
160
157
  config = deepMerge(baseConfig, overrideConfigs)
161
158
 
@@ -163,24 +160,14 @@ initPromise = (async function () {
163
160
  const optsWithChild = { ...options, child: workerIndex }
164
161
  codecept = new Codecept(config, optsWithChild)
165
162
 
166
- // Add staggered delay to prevent resource conflicts (e.g., browser port conflicts)
167
- const delay = (workerIndex - 1) * 500 // 0ms, 500ms, 1000ms, etc.
168
- if (delay > 0) {
169
- console.log(`[Worker ${workerIndex}] Waiting ${delay}ms to stagger initialization...`)
170
- await new Promise(resolve => setTimeout(resolve, delay))
171
- }
172
-
173
- console.log(`[Worker ${workerIndex}] Initializing Codecept...`)
174
163
  try {
175
164
  await codecept.init(testRoot)
176
- console.log(`[Worker ${workerIndex}] Codecept initialized successfully`)
177
165
  } catch (initErr) {
178
166
  process.stderr.write(`[Worker ${workerIndex}] FAILED during codecept.init(): ${initErr.message}\n`)
179
167
  process.stderr.write(`${initErr.stack}\n`)
180
168
  process.exit(1)
181
169
  }
182
170
 
183
- console.log(`[Worker ${workerIndex}] Loading tests...`)
184
171
  codecept.loadTests()
185
172
  mocha = container.mocha()
186
173
 
@@ -189,14 +176,9 @@ initPromise = (async function () {
189
176
  // We'll reload test files fresh for each test request
190
177
  } else {
191
178
  // Legacy mode - filter tests upfront
192
- console.log(`[Worker ${workerIndex}] Starting test filtering. Assigned ${tests.length} test UIDs`)
193
179
  filterTests()
194
- const finalCount = mocha.suite.total()
195
- console.log(`[Worker ${workerIndex}] After filtering: ${finalCount} tests to run`)
196
180
  }
197
181
 
198
- console.log(`[Worker ${workerIndex}] Initialization complete, starting tests...`)
199
-
200
182
  // run tests
201
183
  if (poolMode) {
202
184
  await runPoolTests()
@@ -220,7 +202,6 @@ async function runTests() {
220
202
  try {
221
203
  await codecept.bootstrap()
222
204
  } catch (err) {
223
- console.error(`[Worker ${workerIndex}] Bootstrap error:`, err.message)
224
205
  throw new Error(`Error while running bootstrap file :${err}`)
225
206
  }
226
207
  listenToParentThread()
@@ -229,13 +210,12 @@ async function runTests() {
229
210
  try {
230
211
  await codecept.run()
231
212
  } catch (err) {
232
- console.error(`[Worker ${workerIndex}] Runtime error:`, err.message)
233
213
  throw err
234
214
  } finally {
235
215
  try {
236
216
  await codecept.teardown()
237
217
  } catch (err) {
238
- console.error(`[Worker ${workerIndex}] Teardown error:`, err.message)
218
+ // Ignore teardown errors
239
219
  }
240
220
  }
241
221
  }
@@ -424,26 +404,6 @@ function filterTests() {
424
404
  mocha.files = files
425
405
  mocha.loadFiles()
426
406
 
427
- // Collect all loaded tests for debugging
428
- const allLoadedTests = [];
429
- mocha.suite.eachTest(test => {
430
- if (test) {
431
- allLoadedTests.push({ uid: test.uid, title: test.fullTitle() });
432
- }
433
- });
434
-
435
- console.log(`[Worker ${workerIndex}] Loaded ${allLoadedTests.length} tests from ${files.length} files`);
436
- console.log(`[Worker ${workerIndex}] Expecting ${tests.length} test UIDs`);
437
-
438
- const loadedUids = new Set(allLoadedTests.map(t => t.uid));
439
- const missingTests = tests.filter(uid => !loadedUids.has(uid));
440
-
441
- if (missingTests.length > 0) {
442
- console.error(`[Worker ${workerIndex}] ERROR: ${missingTests.length} assigned tests NOT FOUND in loaded files!`);
443
- console.error(`[Worker ${workerIndex}] Missing UIDs:`, missingTests);
444
- console.error(`[Worker ${workerIndex}] Available UIDs:`, Array.from(loadedUids).slice(0, 5), '...');
445
- }
446
-
447
407
  // Recursively filter tests in all suites (including nested ones)
448
408
  const filterSuiteTests = (suite) => {
449
409
  suite.tests = suite.tests.filter(test => tests.indexOf(test.uid) >= 0)
package/lib/workers.js CHANGED
@@ -582,11 +582,6 @@ class Workers extends EventEmitter {
582
582
  // Track current test
583
583
  if (message.event === event.test.started && message.data) {
584
584
  currentTest = message.data.title || message.data.fullTitle
585
- console.log(`[Worker ${message.workerIndex}] Started: ${currentTest}`)
586
- }
587
-
588
- if (message.event === event.test.finished && message.data) {
589
- console.log(`[Worker ${message.workerIndex}] Finished: ${message.data.title || currentTest}`)
590
585
  }
591
586
 
592
587
  output.process(message.workerIndex)
@@ -724,8 +719,6 @@ class Workers extends EventEmitter {
724
719
  // Mark as failed
725
720
  process.exitCode = 1
726
721
  }
727
-
728
- console.log(`[Main] Workers closed: ${this.closedWorkers}/${this.numberOfWorkers}`)
729
722
 
730
723
  if (this.isPoolMode) {
731
724
  // Pool mode: finish when all workers have exited and no more tests
@@ -740,7 +733,6 @@ class Workers extends EventEmitter {
740
733
  }
741
734
 
742
735
  _finishRun() {
743
- console.log('[Main] Finishing test run...')
744
736
  event.dispatcher.emit(event.workers.after, { tests: this.workers.map(worker => worker.tests) })
745
737
  if (Container.result().hasFailed || this.errors.length > 0) {
746
738
  process.exitCode = 1
@@ -782,10 +774,8 @@ class Workers extends EventEmitter {
782
774
  this._testStates.clear()
783
775
  }
784
776
 
785
- console.log('[Main] Emitting final results...')
786
777
  this.emit(event.all.result, Container.result())
787
778
  event.dispatcher.emit(event.workers.result, Container.result())
788
- console.log('[Main] Emitting end event...')
789
779
  this.emit('end') // internal event
790
780
  }
791
781
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeceptjs",
3
- "version": "4.0.2-beta.15",
3
+ "version": "4.0.2-beta.17",
4
4
  "type": "module",
5
5
  "description": "Supercharged End 2 End Testing Framework for NodeJS",
6
6
  "keywords": [