codeceptjs 4.0.0-beta.4 → 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 (150) 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 +139 -87
  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/generate.js +10 -14
  17. package/lib/command/gherkin/snippets.js +75 -73
  18. package/lib/command/gherkin/steps.js +1 -1
  19. package/lib/command/info.js +42 -8
  20. package/lib/command/init.js +13 -12
  21. package/lib/command/interactive.js +10 -2
  22. package/lib/command/list.js +1 -1
  23. package/lib/command/run-multiple/chunk.js +48 -45
  24. package/lib/command/run-multiple.js +12 -35
  25. package/lib/command/run-workers.js +21 -58
  26. package/lib/command/utils.js +5 -6
  27. package/lib/command/workers/runTests.js +262 -220
  28. package/lib/container.js +386 -238
  29. package/lib/data/context.js +10 -13
  30. package/lib/data/dataScenarioConfig.js +8 -8
  31. package/lib/data/dataTableArgument.js +6 -6
  32. package/lib/data/table.js +5 -11
  33. package/lib/effects.js +223 -0
  34. package/lib/element/WebElement.js +327 -0
  35. package/lib/els.js +158 -0
  36. package/lib/event.js +21 -17
  37. package/lib/heal.js +88 -80
  38. package/lib/helper/AI.js +2 -1
  39. package/lib/helper/ApiDataFactory.js +3 -6
  40. package/lib/helper/Appium.js +47 -51
  41. package/lib/helper/FileSystem.js +3 -3
  42. package/lib/helper/GraphQLDataFactory.js +3 -3
  43. package/lib/helper/JSONResponse.js +75 -37
  44. package/lib/helper/Mochawesome.js +31 -9
  45. package/lib/helper/Nightmare.js +35 -53
  46. package/lib/helper/Playwright.js +262 -267
  47. package/lib/helper/Protractor.js +54 -77
  48. package/lib/helper/Puppeteer.js +246 -260
  49. package/lib/helper/REST.js +5 -17
  50. package/lib/helper/TestCafe.js +21 -44
  51. package/lib/helper/WebDriver.js +151 -170
  52. package/lib/helper/extras/Popup.js +22 -22
  53. package/lib/helper/testcafe/testcafe-utils.js +26 -27
  54. package/lib/listener/emptyRun.js +55 -0
  55. package/lib/listener/exit.js +7 -10
  56. package/lib/listener/{retry.js → globalRetry.js} +5 -5
  57. package/lib/listener/globalTimeout.js +165 -0
  58. package/lib/listener/helpers.js +15 -15
  59. package/lib/listener/mocha.js +1 -1
  60. package/lib/listener/result.js +12 -0
  61. package/lib/listener/retryEnhancer.js +85 -0
  62. package/lib/listener/steps.js +32 -18
  63. package/lib/listener/store.js +20 -0
  64. package/lib/mocha/asyncWrapper.js +231 -0
  65. package/lib/{interfaces → mocha}/bdd.js +3 -3
  66. package/lib/mocha/cli.js +308 -0
  67. package/lib/mocha/factory.js +104 -0
  68. package/lib/{interfaces → mocha}/featureConfig.js +32 -12
  69. package/lib/{interfaces → mocha}/gherkin.js +26 -28
  70. package/lib/mocha/hooks.js +112 -0
  71. package/lib/mocha/index.js +12 -0
  72. package/lib/mocha/inject.js +29 -0
  73. package/lib/{interfaces → mocha}/scenarioConfig.js +31 -7
  74. package/lib/mocha/suite.js +82 -0
  75. package/lib/mocha/test.js +181 -0
  76. package/lib/mocha/types.d.ts +42 -0
  77. package/lib/mocha/ui.js +232 -0
  78. package/lib/output.js +82 -62
  79. package/lib/pause.js +160 -138
  80. package/lib/plugin/analyze.js +396 -0
  81. package/lib/plugin/auth.js +435 -0
  82. package/lib/plugin/autoDelay.js +8 -8
  83. package/lib/plugin/autoLogin.js +3 -338
  84. package/lib/plugin/commentStep.js +6 -1
  85. package/lib/plugin/coverage.js +10 -19
  86. package/lib/plugin/customLocator.js +3 -3
  87. package/lib/plugin/customReporter.js +52 -0
  88. package/lib/plugin/eachElement.js +1 -1
  89. package/lib/plugin/fakerTransform.js +1 -1
  90. package/lib/plugin/heal.js +36 -9
  91. package/lib/plugin/htmlReporter.js +1947 -0
  92. package/lib/plugin/pageInfo.js +140 -0
  93. package/lib/plugin/retryFailedStep.js +17 -18
  94. package/lib/plugin/retryTo.js +2 -113
  95. package/lib/plugin/screenshotOnFail.js +17 -58
  96. package/lib/plugin/selenoid.js +15 -35
  97. package/lib/plugin/standardActingHelpers.js +4 -1
  98. package/lib/plugin/stepByStepReport.js +56 -17
  99. package/lib/plugin/stepTimeout.js +5 -12
  100. package/lib/plugin/subtitles.js +4 -4
  101. package/lib/plugin/tryTo.js +3 -102
  102. package/lib/plugin/wdio.js +8 -10
  103. package/lib/recorder.js +155 -124
  104. package/lib/rerun.js +43 -42
  105. package/lib/result.js +161 -0
  106. package/lib/secret.js +1 -1
  107. package/lib/step/base.js +239 -0
  108. package/lib/step/comment.js +10 -0
  109. package/lib/step/config.js +50 -0
  110. package/lib/step/func.js +46 -0
  111. package/lib/step/helper.js +50 -0
  112. package/lib/step/meta.js +99 -0
  113. package/lib/step/record.js +74 -0
  114. package/lib/step/retry.js +11 -0
  115. package/lib/step/section.js +55 -0
  116. package/lib/step.js +21 -332
  117. package/lib/steps.js +50 -0
  118. package/lib/store.js +37 -5
  119. package/lib/template/heal.js +2 -11
  120. package/lib/test-server.js +323 -0
  121. package/lib/timeout.js +66 -0
  122. package/lib/utils.js +351 -218
  123. package/lib/within.js +75 -55
  124. package/lib/workerStorage.js +2 -1
  125. package/lib/workers.js +386 -276
  126. package/package.json +76 -70
  127. package/translations/de-DE.js +4 -3
  128. package/translations/fr-FR.js +4 -3
  129. package/translations/index.js +1 -0
  130. package/translations/it-IT.js +4 -3
  131. package/translations/ja-JP.js +4 -3
  132. package/translations/nl-NL.js +76 -0
  133. package/translations/pl-PL.js +4 -3
  134. package/translations/pt-BR.js +4 -3
  135. package/translations/ru-RU.js +4 -3
  136. package/translations/utils.js +9 -0
  137. package/translations/zh-CN.js +4 -3
  138. package/translations/zh-TW.js +4 -3
  139. package/typings/index.d.ts +188 -186
  140. package/typings/promiseBasedTypes.d.ts +18 -705
  141. package/typings/types.d.ts +301 -804
  142. package/lib/cli.js +0 -256
  143. package/lib/helper/ExpectHelper.js +0 -391
  144. package/lib/helper/SoftExpectHelper.js +0 -381
  145. package/lib/listener/artifacts.js +0 -19
  146. package/lib/listener/timeout.js +0 -109
  147. package/lib/mochaFactory.js +0 -113
  148. package/lib/plugin/debugErrors.js +0 -67
  149. package/lib/scenario.js +0 -224
  150. 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', () => {