codeceptjs 4.0.0-beta.3 → 4.0.0-beta.5

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 (155) hide show
  1. package/README.md +134 -119
  2. package/bin/codecept.js +12 -2
  3. package/bin/test-server.js +53 -0
  4. package/docs/webapi/clearCookie.mustache +1 -1
  5. package/lib/actor.js +66 -102
  6. package/lib/ai.js +130 -121
  7. package/lib/assert/empty.js +3 -5
  8. package/lib/assert/equal.js +4 -7
  9. package/lib/assert/include.js +4 -6
  10. package/lib/assert/throws.js +2 -4
  11. package/lib/assert/truth.js +2 -2
  12. package/lib/codecept.js +141 -86
  13. package/lib/command/check.js +201 -0
  14. package/lib/command/configMigrate.js +2 -4
  15. package/lib/command/definitions.js +8 -26
  16. package/lib/command/dryRun.js +30 -35
  17. package/lib/command/generate.js +10 -14
  18. package/lib/command/gherkin/snippets.js +75 -73
  19. package/lib/command/gherkin/steps.js +1 -1
  20. package/lib/command/info.js +42 -8
  21. package/lib/command/init.js +13 -12
  22. package/lib/command/interactive.js +10 -2
  23. package/lib/command/list.js +1 -1
  24. package/lib/command/run-multiple/chunk.js +48 -45
  25. package/lib/command/run-multiple.js +12 -35
  26. package/lib/command/run-workers.js +21 -58
  27. package/lib/command/utils.js +5 -6
  28. package/lib/command/workers/runTests.js +263 -222
  29. package/lib/container.js +386 -238
  30. package/lib/data/context.js +10 -13
  31. package/lib/data/dataScenarioConfig.js +8 -8
  32. package/lib/data/dataTableArgument.js +6 -6
  33. package/lib/data/table.js +5 -11
  34. package/lib/effects.js +223 -0
  35. package/lib/element/WebElement.js +327 -0
  36. package/lib/els.js +158 -0
  37. package/lib/event.js +21 -17
  38. package/lib/heal.js +88 -80
  39. package/lib/helper/AI.js +2 -1
  40. package/lib/helper/ApiDataFactory.js +4 -7
  41. package/lib/helper/Appium.js +50 -57
  42. package/lib/helper/FileSystem.js +3 -3
  43. package/lib/helper/GraphQLDataFactory.js +4 -4
  44. package/lib/helper/JSONResponse.js +75 -37
  45. package/lib/helper/Mochawesome.js +31 -9
  46. package/lib/helper/Nightmare.js +37 -58
  47. package/lib/helper/Playwright.js +267 -272
  48. package/lib/helper/Protractor.js +56 -87
  49. package/lib/helper/Puppeteer.js +247 -264
  50. package/lib/helper/REST.js +29 -17
  51. package/lib/helper/TestCafe.js +22 -47
  52. package/lib/helper/WebDriver.js +157 -368
  53. package/lib/helper/extras/PlaywrightPropEngine.js +2 -2
  54. package/lib/helper/extras/Popup.js +22 -22
  55. package/lib/helper/network/utils.js +1 -1
  56. package/lib/helper/testcafe/testcafe-utils.js +27 -28
  57. package/lib/listener/emptyRun.js +55 -0
  58. package/lib/listener/exit.js +7 -10
  59. package/lib/listener/{retry.js → globalRetry.js} +5 -5
  60. package/lib/listener/globalTimeout.js +165 -0
  61. package/lib/listener/helpers.js +15 -15
  62. package/lib/listener/mocha.js +1 -1
  63. package/lib/listener/result.js +12 -0
  64. package/lib/listener/retryEnhancer.js +85 -0
  65. package/lib/listener/steps.js +32 -18
  66. package/lib/listener/store.js +20 -0
  67. package/lib/locator.js +1 -1
  68. package/lib/mocha/asyncWrapper.js +231 -0
  69. package/lib/{interfaces → mocha}/bdd.js +3 -3
  70. package/lib/mocha/cli.js +308 -0
  71. package/lib/mocha/factory.js +104 -0
  72. package/lib/{interfaces → mocha}/featureConfig.js +32 -12
  73. package/lib/{interfaces → mocha}/gherkin.js +26 -28
  74. package/lib/mocha/hooks.js +112 -0
  75. package/lib/mocha/index.js +12 -0
  76. package/lib/mocha/inject.js +29 -0
  77. package/lib/{interfaces → mocha}/scenarioConfig.js +31 -7
  78. package/lib/mocha/suite.js +82 -0
  79. package/lib/mocha/test.js +181 -0
  80. package/lib/mocha/types.d.ts +42 -0
  81. package/lib/mocha/ui.js +232 -0
  82. package/lib/output.js +93 -65
  83. package/lib/pause.js +160 -138
  84. package/lib/plugin/analyze.js +396 -0
  85. package/lib/plugin/auth.js +435 -0
  86. package/lib/plugin/autoDelay.js +8 -8
  87. package/lib/plugin/autoLogin.js +3 -338
  88. package/lib/plugin/commentStep.js +6 -1
  89. package/lib/plugin/coverage.js +10 -22
  90. package/lib/plugin/customLocator.js +3 -3
  91. package/lib/plugin/customReporter.js +52 -0
  92. package/lib/plugin/eachElement.js +1 -1
  93. package/lib/plugin/fakerTransform.js +1 -1
  94. package/lib/plugin/heal.js +36 -9
  95. package/lib/plugin/htmlReporter.js +1947 -0
  96. package/lib/plugin/pageInfo.js +140 -0
  97. package/lib/plugin/retryFailedStep.js +17 -18
  98. package/lib/plugin/retryTo.js +2 -113
  99. package/lib/plugin/screenshotOnFail.js +17 -58
  100. package/lib/plugin/selenoid.js +15 -35
  101. package/lib/plugin/standardActingHelpers.js +4 -1
  102. package/lib/plugin/stepByStepReport.js +56 -17
  103. package/lib/plugin/stepTimeout.js +5 -12
  104. package/lib/plugin/subtitles.js +4 -4
  105. package/lib/plugin/tryTo.js +3 -102
  106. package/lib/plugin/wdio.js +8 -10
  107. package/lib/recorder.js +155 -124
  108. package/lib/rerun.js +43 -42
  109. package/lib/result.js +161 -0
  110. package/lib/secret.js +1 -2
  111. package/lib/step/base.js +239 -0
  112. package/lib/step/comment.js +10 -0
  113. package/lib/step/config.js +50 -0
  114. package/lib/step/func.js +46 -0
  115. package/lib/step/helper.js +50 -0
  116. package/lib/step/meta.js +99 -0
  117. package/lib/step/record.js +74 -0
  118. package/lib/step/retry.js +11 -0
  119. package/lib/step/section.js +55 -0
  120. package/lib/step.js +21 -332
  121. package/lib/steps.js +50 -0
  122. package/lib/store.js +37 -5
  123. package/lib/template/heal.js +2 -11
  124. package/lib/test-server.js +323 -0
  125. package/lib/timeout.js +66 -0
  126. package/lib/utils.js +351 -218
  127. package/lib/within.js +75 -55
  128. package/lib/workerStorage.js +2 -1
  129. package/lib/workers.js +386 -277
  130. package/package.json +81 -75
  131. package/translations/de-DE.js +5 -3
  132. package/translations/fr-FR.js +5 -4
  133. package/translations/index.js +1 -0
  134. package/translations/it-IT.js +4 -3
  135. package/translations/ja-JP.js +4 -3
  136. package/translations/nl-NL.js +76 -0
  137. package/translations/pl-PL.js +4 -3
  138. package/translations/pt-BR.js +4 -3
  139. package/translations/ru-RU.js +4 -3
  140. package/translations/utils.js +9 -0
  141. package/translations/zh-CN.js +4 -3
  142. package/translations/zh-TW.js +4 -3
  143. package/typings/index.d.ts +197 -187
  144. package/typings/promiseBasedTypes.d.ts +53 -903
  145. package/typings/types.d.ts +372 -1042
  146. package/lib/cli.js +0 -257
  147. package/lib/helper/ExpectHelper.js +0 -391
  148. package/lib/helper/MockServer.js +0 -221
  149. package/lib/helper/SoftExpectHelper.js +0 -381
  150. package/lib/listener/artifacts.js +0 -19
  151. package/lib/listener/timeout.js +0 -109
  152. package/lib/mochaFactory.js +0 -113
  153. package/lib/plugin/debugErrors.js +0 -67
  154. package/lib/scenario.js +0 -224
  155. package/lib/ui.js +0 -236
package/lib/within.js CHANGED
@@ -1,70 +1,90 @@
1
- const output = require('./output');
2
- const store = require('./store');
3
- const recorder = require('./recorder');
4
- const container = require('./container');
5
- const event = require('./event');
6
- const Step = require('./step');
7
- const { isAsyncFunction } = require('./utils');
1
+ const output = require('./output')
2
+ const store = require('./store')
3
+ const recorder = require('./recorder')
4
+ const container = require('./container')
5
+ const event = require('./event')
6
+ const MetaStep = require('./step/meta')
7
+ const { isAsyncFunction } = require('./utils')
8
8
 
9
9
  /**
10
+ * TODO: move to effects
11
+ *
10
12
  * @param {CodeceptJS.LocatorOrString} context
11
13
  * @param {Function} fn
12
14
  * @return {Promise<*> | undefined}
13
15
  */
14
16
  function within(context, fn) {
15
- const helpers = store.dryRun ? {} : container.helpers();
16
- const locator = typeof context === 'object' ? JSON.stringify(context) : context;
17
+ const helpers = store.dryRun ? {} : container.helpers()
18
+ const locator = typeof context === 'object' ? JSON.stringify(context) : context
17
19
 
18
- return recorder.add('register within wrapper', () => {
19
- const metaStep = new Step.MetaStep('Within', `"${locator}"`);
20
- const defineMetaStep = step => step.metaStep = metaStep;
21
- recorder.session.start('within');
20
+ return recorder.add(
21
+ 'register within wrapper',
22
+ () => {
23
+ const metaStep = new WithinStep(locator, fn)
24
+ const defineMetaStep = step => (step.metaStep = metaStep)
25
+ recorder.session.start('within')
22
26
 
23
- event.dispatcher.prependListener(event.step.before, defineMetaStep);
27
+ event.dispatcher.prependListener(event.step.before, defineMetaStep)
24
28
 
25
- Object.keys(helpers).forEach((helper) => {
26
- if (helpers[helper]._withinBegin) recorder.add(`[${helper}] start within`, () => helpers[helper]._withinBegin(context));
27
- });
29
+ Object.keys(helpers).forEach(helper => {
30
+ if (helpers[helper]._withinBegin) recorder.add(`[${helper}] start within`, () => helpers[helper]._withinBegin(context))
31
+ })
28
32
 
29
- const finalize = () => {
30
- event.dispatcher.removeListener(event.step.before, defineMetaStep);
31
- recorder.add('Finalize session within session', () => {
32
- output.stepShift = 1;
33
- recorder.session.restore('within');
34
- });
35
- };
36
- const finishHelpers = () => {
37
- Object.keys(helpers).forEach((helper) => {
38
- if (helpers[helper]._withinEnd) recorder.add(`[${helper}] finish within`, () => helpers[helper]._withinEnd());
39
- });
40
- };
33
+ const finalize = () => {
34
+ event.dispatcher.removeListener(event.step.before, defineMetaStep)
35
+ recorder.add('Finalize session within session', () => {
36
+ output.stepShift = 1
37
+ recorder.session.restore('within')
38
+ })
39
+ }
40
+ const finishHelpers = () => {
41
+ Object.keys(helpers).forEach(helper => {
42
+ if (helpers[helper]._withinEnd) recorder.add(`[${helper}] finish within`, () => helpers[helper]._withinEnd())
43
+ })
44
+ }
41
45
 
42
- if (isAsyncFunction(fn)) {
43
- return fn().then((res) => {
44
- finishHelpers();
45
- finalize();
46
- return recorder.promise().then(() => res);
47
- }).catch((e) => {
48
- finalize();
49
- recorder.throw(e);
50
- });
51
- }
46
+ if (isAsyncFunction(fn)) {
47
+ return fn()
48
+ .then(res => {
49
+ finishHelpers()
50
+ finalize()
51
+ return recorder.promise().then(() => res)
52
+ })
53
+ .catch(e => {
54
+ finalize()
55
+ recorder.throw(e)
56
+ })
57
+ }
52
58
 
53
- let res;
54
- try {
55
- res = fn();
56
- } catch (err) {
57
- recorder.throw(err);
58
- } finally {
59
- finishHelpers();
60
- recorder.catch((err) => {
61
- output.stepShift = 1;
62
- throw err;
63
- });
64
- }
65
- finalize();
66
- return recorder.promise().then(() => res);
67
- }, false, false);
59
+ let res
60
+ try {
61
+ res = fn()
62
+ } catch (err) {
63
+ recorder.throw(err)
64
+ } finally {
65
+ finishHelpers()
66
+ recorder.catch(err => {
67
+ output.stepShift = 1
68
+ throw err
69
+ })
70
+ }
71
+ finalize()
72
+ return recorder.promise().then(() => res)
73
+ },
74
+ false,
75
+ false,
76
+ )
68
77
  }
69
78
 
70
- module.exports = within;
79
+ module.exports = within
80
+
81
+ class WithinStep extends MetaStep {
82
+ constructor(locator, fn) {
83
+ super('Within')
84
+ this.args = [locator]
85
+ }
86
+
87
+ toString() {
88
+ return `${this.prefix}Within ${this.humanizeArgs()}${this.suffix}`
89
+ }
90
+ }
@@ -7,7 +7,8 @@ const invokeWorkerListeners = (workerObj) => {
7
7
  const { threadId } = workerObj;
8
8
  workerObj.on('message', (messageData) => {
9
9
  if (messageData.event === shareEvent) {
10
- share(messageData.data);
10
+ const Container = require('./container');
11
+ Container.share(messageData.data);
11
12
  }
12
13
  });
13
14
  workerObj.on('exit', () => {