codeceptjs 3.6.10 → 3.7.0-beta.2

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 (105) hide show
  1. package/README.md +81 -110
  2. package/bin/codecept.js +2 -2
  3. package/docs/webapi/clearCookie.mustache +1 -1
  4. package/lib/actor.js +46 -36
  5. package/lib/assert/empty.js +3 -5
  6. package/lib/assert/equal.js +4 -7
  7. package/lib/assert/include.js +4 -6
  8. package/lib/assert/throws.js +2 -4
  9. package/lib/assert/truth.js +2 -2
  10. package/lib/codecept.js +87 -83
  11. package/lib/command/configMigrate.js +2 -4
  12. package/lib/command/definitions.js +5 -25
  13. package/lib/command/generate.js +10 -14
  14. package/lib/command/gherkin/snippets.js +10 -8
  15. package/lib/command/gherkin/steps.js +1 -1
  16. package/lib/command/info.js +1 -3
  17. package/lib/command/init.js +8 -12
  18. package/lib/command/interactive.js +1 -1
  19. package/lib/command/list.js +1 -1
  20. package/lib/command/run-multiple.js +12 -35
  21. package/lib/command/run-workers.js +10 -10
  22. package/lib/command/utils.js +5 -6
  23. package/lib/command/workers/runTests.js +14 -17
  24. package/lib/container.js +327 -237
  25. package/lib/data/context.js +10 -13
  26. package/lib/data/dataScenarioConfig.js +8 -8
  27. package/lib/data/dataTableArgument.js +6 -6
  28. package/lib/data/table.js +5 -11
  29. package/lib/els.js +177 -0
  30. package/lib/event.js +1 -0
  31. package/lib/heal.js +78 -80
  32. package/lib/helper/ApiDataFactory.js +3 -6
  33. package/lib/helper/Appium.js +15 -30
  34. package/lib/helper/FileSystem.js +3 -3
  35. package/lib/helper/GraphQLDataFactory.js +3 -3
  36. package/lib/helper/JSONResponse.js +57 -37
  37. package/lib/helper/Nightmare.js +35 -53
  38. package/lib/helper/Playwright.js +189 -251
  39. package/lib/helper/Protractor.js +54 -77
  40. package/lib/helper/Puppeteer.js +134 -232
  41. package/lib/helper/REST.js +5 -17
  42. package/lib/helper/TestCafe.js +21 -44
  43. package/lib/helper/WebDriver.js +103 -162
  44. package/lib/helper/testcafe/testcafe-utils.js +26 -27
  45. package/lib/listener/artifacts.js +2 -2
  46. package/lib/listener/emptyRun.js +58 -0
  47. package/lib/listener/exit.js +4 -4
  48. package/lib/listener/{retry.js → globalRetry.js} +5 -5
  49. package/lib/listener/{timeout.js → globalTimeout.js} +9 -8
  50. package/lib/listener/helpers.js +15 -15
  51. package/lib/listener/mocha.js +1 -1
  52. package/lib/listener/steps.js +17 -12
  53. package/lib/listener/store.js +12 -0
  54. package/lib/mocha/asyncWrapper.js +204 -0
  55. package/lib/{interfaces → mocha}/bdd.js +3 -3
  56. package/lib/mocha/cli.js +257 -0
  57. package/lib/mocha/factory.js +104 -0
  58. package/lib/{interfaces → mocha}/featureConfig.js +11 -12
  59. package/lib/{interfaces → mocha}/gherkin.js +26 -28
  60. package/lib/mocha/hooks.js +83 -0
  61. package/lib/mocha/index.js +12 -0
  62. package/lib/mocha/inject.js +24 -0
  63. package/lib/{interfaces → mocha}/scenarioConfig.js +10 -6
  64. package/lib/mocha/suite.js +55 -0
  65. package/lib/mocha/test.js +60 -0
  66. package/lib/mocha/types.d.ts +31 -0
  67. package/lib/mocha/ui.js +219 -0
  68. package/lib/output.js +28 -10
  69. package/lib/pause.js +159 -135
  70. package/lib/plugin/autoDelay.js +4 -4
  71. package/lib/plugin/autoLogin.js +6 -7
  72. package/lib/plugin/commentStep.js +1 -1
  73. package/lib/plugin/coverage.js +10 -19
  74. package/lib/plugin/customLocator.js +3 -3
  75. package/lib/plugin/debugErrors.js +2 -2
  76. package/lib/plugin/eachElement.js +1 -1
  77. package/lib/plugin/fakerTransform.js +1 -1
  78. package/lib/plugin/heal.js +6 -9
  79. package/lib/plugin/retryFailedStep.js +4 -4
  80. package/lib/plugin/retryTo.js +2 -2
  81. package/lib/plugin/screenshotOnFail.js +9 -36
  82. package/lib/plugin/selenoid.js +15 -35
  83. package/lib/plugin/stepByStepReport.js +51 -13
  84. package/lib/plugin/stepTimeout.js +4 -11
  85. package/lib/plugin/subtitles.js +4 -4
  86. package/lib/plugin/tryTo.js +1 -1
  87. package/lib/plugin/wdio.js +8 -10
  88. package/lib/recorder.js +142 -121
  89. package/lib/secret.js +1 -1
  90. package/lib/step.js +160 -144
  91. package/lib/store.js +6 -2
  92. package/lib/template/heal.js +2 -11
  93. package/lib/utils.js +224 -216
  94. package/lib/within.js +73 -55
  95. package/lib/workers.js +265 -261
  96. package/package.json +46 -47
  97. package/typings/index.d.ts +172 -184
  98. package/typings/promiseBasedTypes.d.ts +95 -516
  99. package/typings/types.d.ts +169 -587
  100. package/lib/cli.js +0 -256
  101. package/lib/helper/ExpectHelper.js +0 -391
  102. package/lib/helper/SoftExpectHelper.js +0 -381
  103. package/lib/mochaFactory.js +0 -113
  104. package/lib/scenario.js +0 -224
  105. package/lib/ui.js +0 -236
package/lib/within.js CHANGED
@@ -1,10 +1,10 @@
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 Step = require('./step')
7
+ const { isAsyncFunction } = require('./utils')
8
8
 
9
9
  /**
10
10
  * @param {CodeceptJS.LocatorOrString} context
@@ -12,59 +12,77 @@ const { isAsyncFunction } = require('./utils');
12
12
  * @return {Promise<*> | undefined}
13
13
  */
14
14
  function within(context, fn) {
15
- const helpers = store.dryRun ? {} : container.helpers();
16
- const locator = typeof context === 'object' ? JSON.stringify(context) : context;
15
+ const helpers = store.dryRun ? {} : container.helpers()
16
+ const locator = typeof context === 'object' ? JSON.stringify(context) : context
17
17
 
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');
18
+ return recorder.add(
19
+ 'register within wrapper',
20
+ () => {
21
+ const metaStep = new WithinStep(locator, fn)
22
+ const defineMetaStep = step => (step.metaStep = metaStep)
23
+ recorder.session.start('within')
22
24
 
23
- event.dispatcher.prependListener(event.step.before, defineMetaStep);
25
+ event.dispatcher.prependListener(event.step.before, defineMetaStep)
24
26
 
25
- Object.keys(helpers).forEach((helper) => {
26
- if (helpers[helper]._withinBegin) recorder.add(`[${helper}] start within`, () => helpers[helper]._withinBegin(context));
27
- });
27
+ Object.keys(helpers).forEach(helper => {
28
+ if (helpers[helper]._withinBegin) recorder.add(`[${helper}] start within`, () => helpers[helper]._withinBegin(context))
29
+ })
28
30
 
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
- };
31
+ const finalize = () => {
32
+ event.dispatcher.removeListener(event.step.before, defineMetaStep)
33
+ recorder.add('Finalize session within session', () => {
34
+ output.stepShift = 1
35
+ recorder.session.restore('within')
36
+ })
37
+ }
38
+ const finishHelpers = () => {
39
+ Object.keys(helpers).forEach(helper => {
40
+ if (helpers[helper]._withinEnd) recorder.add(`[${helper}] finish within`, () => helpers[helper]._withinEnd())
41
+ })
42
+ }
41
43
 
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
- }
44
+ if (isAsyncFunction(fn)) {
45
+ return fn()
46
+ .then(res => {
47
+ finishHelpers()
48
+ finalize()
49
+ return recorder.promise().then(() => res)
50
+ })
51
+ .catch(e => {
52
+ finalize()
53
+ recorder.throw(e)
54
+ })
55
+ }
52
56
 
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);
57
+ let res
58
+ try {
59
+ res = fn()
60
+ } catch (err) {
61
+ recorder.throw(err)
62
+ } finally {
63
+ finishHelpers()
64
+ recorder.catch(err => {
65
+ output.stepShift = 1
66
+ throw err
67
+ })
68
+ }
69
+ finalize()
70
+ return recorder.promise().then(() => res)
71
+ },
72
+ false,
73
+ false,
74
+ )
68
75
  }
69
76
 
70
- module.exports = within;
77
+ module.exports = within
78
+
79
+ class WithinStep extends Step.MetaStep {
80
+ constructor(locator, fn) {
81
+ super('Within')
82
+ this.args = [locator]
83
+ }
84
+
85
+ toString() {
86
+ return `${this.prefix}Within ${this.humanizeArgs()}${this.suffix}`
87
+ }
88
+ }