codeceptjs 3.7.0-beta.7 → 3.7.0-beta.8

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.
Files changed (45) hide show
  1. package/lib/actor.js +1 -2
  2. package/lib/ai.js +130 -121
  3. package/lib/codecept.js +4 -4
  4. package/lib/command/check.js +4 -0
  5. package/lib/command/run-workers.js +1 -53
  6. package/lib/command/workers/runTests.js +25 -189
  7. package/lib/container.js +16 -0
  8. package/lib/event.js +18 -17
  9. package/lib/listener/exit.js +5 -8
  10. package/lib/listener/globalTimeout.js +26 -9
  11. package/lib/listener/result.js +12 -0
  12. package/lib/listener/steps.js +0 -6
  13. package/lib/mocha/asyncWrapper.js +12 -2
  14. package/lib/mocha/cli.js +50 -24
  15. package/lib/mocha/hooks.js +32 -3
  16. package/lib/mocha/suite.js +27 -1
  17. package/lib/mocha/test.js +91 -7
  18. package/lib/mocha/types.d.ts +5 -0
  19. package/lib/output.js +1 -0
  20. package/lib/plugin/analyze.js +351 -0
  21. package/lib/plugin/commentStep.js +5 -0
  22. package/lib/plugin/customReporter.js +52 -0
  23. package/lib/plugin/heal.js +2 -2
  24. package/lib/plugin/pageInfo.js +143 -0
  25. package/lib/plugin/retryTo.js +10 -2
  26. package/lib/plugin/screenshotOnFail.js +4 -6
  27. package/lib/plugin/stepTimeout.js +1 -1
  28. package/lib/plugin/tryTo.js +9 -1
  29. package/lib/recorder.js +4 -4
  30. package/lib/rerun.js +43 -42
  31. package/lib/result.js +161 -0
  32. package/lib/step/base.js +52 -4
  33. package/lib/step/helper.js +3 -0
  34. package/lib/step/meta.js +9 -1
  35. package/lib/step/record.js +5 -5
  36. package/lib/step/section.js +55 -0
  37. package/lib/steps.js +28 -1
  38. package/lib/{step/timeout.js → timeout.js} +24 -0
  39. package/lib/utils.js +35 -0
  40. package/lib/workers.js +28 -38
  41. package/package.json +2 -2
  42. package/typings/promiseBasedTypes.d.ts +12 -518
  43. package/typings/types.d.ts +75 -518
  44. package/lib/listener/artifacts.js +0 -19
  45. package/lib/plugin/debugErrors.js +0 -67
package/lib/workers.js CHANGED
@@ -12,7 +12,8 @@ const { replaceValueDeep, deepClone } = require('./utils')
12
12
  const mainConfig = require('./config')
13
13
  const output = require('./output')
14
14
  const event = require('./event')
15
- const { repackTestForWorkersTransport: repackTest } = require('./mocha/test')
15
+ const { deserializeTest } = require('./mocha/test')
16
+ const { deserializeSuite } = require('./mocha/suite')
16
17
  const recorder = require('./recorder')
17
18
  const runHook = require('./hooks')
18
19
  const WorkerStorage = require('./workerStorage')
@@ -230,17 +231,10 @@ class Workers extends EventEmitter {
230
231
  super()
231
232
  this.setMaxListeners(50)
232
233
  this.codecept = initializeCodecept(config.testConfig, config.options)
233
- this.failuresLog = []
234
234
  this.errors = []
235
235
  this.numberOfWorkers = 0
236
236
  this.closedWorkers = 0
237
237
  this.workers = []
238
- this.stats = {
239
- passes: 0,
240
- failures: 0,
241
- tests: 0,
242
- pending: 0,
243
- }
244
238
  this.testGroups = []
245
239
 
246
240
  createOutputDir(config.testConfig)
@@ -353,8 +347,6 @@ class Workers extends EventEmitter {
353
347
  }
354
348
 
355
349
  run() {
356
- this.stats.start = new Date()
357
- this.stats.failedHooks = 0
358
350
  recorder.startUnlessRunning()
359
351
  event.dispatcher.emit(event.workers.before)
360
352
  process.env.RUNS_WITH_WORKERS = 'true'
@@ -380,7 +372,7 @@ class Workers extends EventEmitter {
380
372
  * @returns {Boolean}
381
373
  */
382
374
  isFailed() {
383
- return (this.stats.failures || this.errors.length) > 0
375
+ return (Container.result().failures.length || this.errors.length) > 0
384
376
  }
385
377
 
386
378
  _listenWorkerEvents(worker) {
@@ -393,33 +385,37 @@ class Workers extends EventEmitter {
393
385
  }
394
386
 
395
387
  switch (message.event) {
396
- case event.all.failures:
397
- this.failuresLog = this.failuresLog.concat(message.data.failuresLog)
398
- this._appendStats(message.data.stats)
388
+ case event.all.result:
389
+ // we ensure consistency of result by adding tests in the very end
390
+ Container.result().addFailures(message.data.failures)
391
+ Container.result().addStats(message.data.stats)
392
+ message.data.tests.forEach(test => {
393
+ Container.result().addTest(deserializeTest(test))
394
+ })
399
395
  break
400
396
  case event.suite.before:
401
- this.emit(event.suite.before, repackTest(message.data))
397
+ this.emit(event.suite.before, deserializeSuite(message.data))
402
398
  break
403
399
  case event.test.before:
404
- this.emit(event.test.before, repackTest(message.data))
400
+ this.emit(event.test.before, deserializeTest(message.data))
405
401
  break
406
402
  case event.test.started:
407
- this.emit(event.test.started, repackTest(message.data))
403
+ this.emit(event.test.started, deserializeTest(message.data))
408
404
  break
409
405
  case event.test.failed:
410
- this.emit(event.test.failed, repackTest(message.data))
406
+ this.emit(event.test.failed, deserializeTest(message.data))
411
407
  break
412
408
  case event.test.passed:
413
- this.emit(event.test.passed, repackTest(message.data))
409
+ this.emit(event.test.passed, deserializeTest(message.data))
414
410
  break
415
411
  case event.test.skipped:
416
- this.emit(event.test.skipped, repackTest(message.data))
412
+ this.emit(event.test.skipped, deserializeTest(message.data))
417
413
  break
418
414
  case event.test.finished:
419
- this.emit(event.test.finished, repackTest(message.data))
415
+ this.emit(event.test.finished, deserializeTest(message.data))
420
416
  break
421
417
  case event.test.after:
422
- this.emit(event.test.after, repackTest(message.data))
418
+ this.emit(event.test.after, deserializeTest(message.data))
423
419
  break
424
420
  case event.step.finished:
425
421
  this.emit(event.step.finished, message.data)
@@ -431,7 +427,7 @@ class Workers extends EventEmitter {
431
427
  this.emit(event.step.passed, message.data)
432
428
  break
433
429
  case event.step.failed:
434
- this.emit(event.step.failed, message.data)
430
+ this.emit(event.step.failed, message.data, message.data.error)
435
431
  break
436
432
  }
437
433
  })
@@ -450,33 +446,26 @@ class Workers extends EventEmitter {
450
446
 
451
447
  _finishRun() {
452
448
  event.dispatcher.emit(event.workers.after, { tests: this.workers.map(worker => worker.tests) })
453
- if (this.isFailed()) {
449
+ if (Container.result().hasFailed) {
454
450
  process.exitCode = 1
455
451
  } else {
456
452
  process.exitCode = 0
457
453
  }
458
- // removed this.finishedTests because in all /lib only first argument (!this.isFailed()) is used)
459
- this.emit(event.all.result, !this.isFailed())
460
- this.emit('end') // internal event
461
- }
462
454
 
463
- _appendStats(newStats) {
464
- this.stats.passes += newStats.passes
465
- this.stats.failures += newStats.failures
466
- this.stats.tests += newStats.tests
467
- this.stats.pending += newStats.pending
468
- this.stats.failedHooks += newStats.failedHooks
455
+ this.emit(event.all.result, Container.result())
456
+ event.dispatcher.emit(event.workers.result, Container.result())
457
+ this.emit('end') // internal event
469
458
  }
470
459
 
471
460
  printResults() {
472
- this.stats.end = new Date()
473
- this.stats.duration = this.stats.end - this.stats.start
461
+ const result = Container.result()
462
+ result.finish()
474
463
 
475
464
  // Reset process for logs in main thread
476
465
  output.process(null)
477
466
  output.print()
478
467
 
479
- this.failuresLog = this.failuresLog
468
+ this.failuresLog = result.failures
480
469
  .filter(log => log.length && typeof log[1] === 'number')
481
470
  // mocha/lib/reporters/base.js
482
471
  .map(([format, num, title, message, stack], i) => [format, i + 1, title, message, stack])
@@ -487,7 +476,8 @@ class Workers extends EventEmitter {
487
476
  this.failuresLog.forEach(log => output.print(...log))
488
477
  }
489
478
 
490
- output.result(this.stats.passes, this.stats.failures, this.stats.pending, ms(this.stats.duration), this.stats.failedHooks)
479
+ output.result(result.stats.passes, result.stats.failures, result.stats.pending, ms(result.duration), result.stats.failedHooks)
480
+
491
481
  process.env.RUNS_WITH_WORKERS = 'false'
492
482
  }
493
483
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeceptjs",
3
- "version": "3.7.0-beta.7",
3
+ "version": "3.7.0-beta.8",
4
4
  "description": "Supercharged End 2 End Testing Framework for NodeJS",
5
5
  "keywords": [
6
6
  "acceptance",
@@ -94,7 +94,7 @@
94
94
  "figures": "3.2.0",
95
95
  "fn-args": "4.0.0",
96
96
  "fs-extra": "11.2.0",
97
- "glob": ">=9.0.0",
97
+ "glob": "^11.0.1",
98
98
  "fuse.js": "^7.0.0",
99
99
  "html-minifier-terser": "7.2.0",
100
100
  "inquirer": "6.5.2",