codeceptjs 3.5.10 → 3.5.12-beta.1

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 (225) hide show
  1. package/README.md +3 -3
  2. package/lib/command/run-multiple.js +3 -1
  3. package/lib/command/run-workers.js +32 -1
  4. package/lib/command/workers/runTests.js +18 -2
  5. package/lib/helper/Expect.js +33 -33
  6. package/lib/helper/Playwright.js +49 -26
  7. package/lib/helper/Puppeteer.js +41 -19
  8. package/lib/helper/WebDriver.js +155 -48
  9. package/lib/helper/extras/PlaywrightReactVueLocator.js +38 -0
  10. package/lib/locator.js +17 -4
  11. package/lib/plugin/retryFailedStep.js +6 -2
  12. package/lib/plugin/retryTo.js +2 -2
  13. package/lib/plugin/tryTo.js +5 -4
  14. package/package.json +25 -22
  15. package/typings/index.d.ts +8 -5
  16. package/typings/promiseBasedTypes.d.ts +203 -75
  17. package/typings/types.d.ts +213 -145
  18. package/docs/advanced.md +0 -351
  19. package/docs/ai.md +0 -248
  20. package/docs/api.md +0 -323
  21. package/docs/basics.md +0 -979
  22. package/docs/bdd.md +0 -539
  23. package/docs/best.md +0 -237
  24. package/docs/books.md +0 -37
  25. package/docs/bootstrap.md +0 -135
  26. package/docs/build/ApiDataFactory.js +0 -410
  27. package/docs/build/Appium.js +0 -2027
  28. package/docs/build/Expect.js +0 -422
  29. package/docs/build/FileSystem.js +0 -228
  30. package/docs/build/GraphQL.js +0 -229
  31. package/docs/build/GraphQLDataFactory.js +0 -309
  32. package/docs/build/JSONResponse.js +0 -338
  33. package/docs/build/Mochawesome.js +0 -71
  34. package/docs/build/Nightmare.js +0 -2152
  35. package/docs/build/OpenAI.js +0 -126
  36. package/docs/build/Playwright.js +0 -5078
  37. package/docs/build/Protractor.js +0 -2706
  38. package/docs/build/Puppeteer.js +0 -3874
  39. package/docs/build/REST.js +0 -344
  40. package/docs/build/TestCafe.js +0 -2125
  41. package/docs/build/WebDriver.js +0 -4124
  42. package/docs/changelog.md +0 -2572
  43. package/docs/commands.md +0 -266
  44. package/docs/community-helpers.md +0 -58
  45. package/docs/configuration.md +0 -157
  46. package/docs/continuous-integration.md +0 -22
  47. package/docs/custom-helpers.md +0 -306
  48. package/docs/data.md +0 -379
  49. package/docs/detox.md +0 -235
  50. package/docs/docker.md +0 -136
  51. package/docs/email.md +0 -183
  52. package/docs/examples.md +0 -149
  53. package/docs/helpers/ApiDataFactory.md +0 -266
  54. package/docs/helpers/Appium.md +0 -1374
  55. package/docs/helpers/Detox.md +0 -586
  56. package/docs/helpers/Expect.md +0 -275
  57. package/docs/helpers/FileSystem.md +0 -152
  58. package/docs/helpers/GraphQL.md +0 -151
  59. package/docs/helpers/GraphQLDataFactory.md +0 -226
  60. package/docs/helpers/JSONResponse.md +0 -254
  61. package/docs/helpers/Mochawesome.md +0 -8
  62. package/docs/helpers/MockRequest.md +0 -377
  63. package/docs/helpers/Nightmare.md +0 -1305
  64. package/docs/helpers/OpenAI.md +0 -70
  65. package/docs/helpers/Playwright.md +0 -2706
  66. package/docs/helpers/Polly.md +0 -44
  67. package/docs/helpers/Protractor.md +0 -1769
  68. package/docs/helpers/Puppeteer-firefox.md +0 -86
  69. package/docs/helpers/Puppeteer.md +0 -2291
  70. package/docs/helpers/REST.md +0 -218
  71. package/docs/helpers/TestCafe.md +0 -1321
  72. package/docs/helpers/WebDriver.md +0 -2460
  73. package/docs/hooks.md +0 -340
  74. package/docs/index.md +0 -111
  75. package/docs/installation.md +0 -75
  76. package/docs/internal-api.md +0 -266
  77. package/docs/locators.md +0 -331
  78. package/docs/mobile-react-native-locators.md +0 -67
  79. package/docs/mobile.md +0 -338
  80. package/docs/pageobjects.md +0 -291
  81. package/docs/parallel.md +0 -400
  82. package/docs/playwright.md +0 -632
  83. package/docs/plugins.md +0 -1259
  84. package/docs/puppeteer.md +0 -316
  85. package/docs/quickstart.md +0 -162
  86. package/docs/react.md +0 -69
  87. package/docs/reports.md +0 -392
  88. package/docs/secrets.md +0 -36
  89. package/docs/shadow.md +0 -68
  90. package/docs/shared/keys.mustache +0 -31
  91. package/docs/shared/react.mustache +0 -1
  92. package/docs/testcafe.md +0 -174
  93. package/docs/translation.md +0 -247
  94. package/docs/tutorial.md +0 -271
  95. package/docs/typescript.md +0 -180
  96. package/docs/ui.md +0 -59
  97. package/docs/videos.md +0 -28
  98. package/docs/visual.md +0 -202
  99. package/docs/vue.md +0 -121
  100. package/docs/webapi/amOnPage.mustache +0 -11
  101. package/docs/webapi/appendField.mustache +0 -11
  102. package/docs/webapi/attachFile.mustache +0 -12
  103. package/docs/webapi/blur.mustache +0 -18
  104. package/docs/webapi/checkOption.mustache +0 -13
  105. package/docs/webapi/clearCookie.mustache +0 -9
  106. package/docs/webapi/clearField.mustache +0 -9
  107. package/docs/webapi/click.mustache +0 -25
  108. package/docs/webapi/clickLink.mustache +0 -8
  109. package/docs/webapi/closeCurrentTab.mustache +0 -7
  110. package/docs/webapi/closeOtherTabs.mustache +0 -8
  111. package/docs/webapi/dontSee.mustache +0 -11
  112. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  113. package/docs/webapi/dontSeeCookie.mustache +0 -8
  114. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  115. package/docs/webapi/dontSeeElement.mustache +0 -8
  116. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  117. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  118. package/docs/webapi/dontSeeInField.mustache +0 -11
  119. package/docs/webapi/dontSeeInSource.mustache +0 -8
  120. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  121. package/docs/webapi/doubleClick.mustache +0 -13
  122. package/docs/webapi/downloadFile.mustache +0 -12
  123. package/docs/webapi/dragAndDrop.mustache +0 -9
  124. package/docs/webapi/dragSlider.mustache +0 -11
  125. package/docs/webapi/executeAsyncScript.mustache +0 -24
  126. package/docs/webapi/executeScript.mustache +0 -26
  127. package/docs/webapi/fillField.mustache +0 -16
  128. package/docs/webapi/focus.mustache +0 -13
  129. package/docs/webapi/forceClick.mustache +0 -28
  130. package/docs/webapi/forceRightClick.mustache +0 -18
  131. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  132. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  133. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  134. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  135. package/docs/webapi/grabCookie.mustache +0 -11
  136. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  137. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  138. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  139. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  140. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  141. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  142. package/docs/webapi/grabGeoLocation.mustache +0 -8
  143. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  144. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  145. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  146. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  147. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  148. package/docs/webapi/grabPopupText.mustache +0 -5
  149. package/docs/webapi/grabSource.mustache +0 -8
  150. package/docs/webapi/grabTextFrom.mustache +0 -10
  151. package/docs/webapi/grabTextFromAll.mustache +0 -9
  152. package/docs/webapi/grabTitle.mustache +0 -8
  153. package/docs/webapi/grabValueFrom.mustache +0 -9
  154. package/docs/webapi/grabValueFromAll.mustache +0 -8
  155. package/docs/webapi/grabWebElement.mustache +0 -9
  156. package/docs/webapi/grabWebElements.mustache +0 -9
  157. package/docs/webapi/moveCursorTo.mustache +0 -12
  158. package/docs/webapi/openNewTab.mustache +0 -7
  159. package/docs/webapi/pressKey.mustache +0 -12
  160. package/docs/webapi/pressKeyDown.mustache +0 -12
  161. package/docs/webapi/pressKeyUp.mustache +0 -12
  162. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  163. package/docs/webapi/refreshPage.mustache +0 -6
  164. package/docs/webapi/resizeWindow.mustache +0 -6
  165. package/docs/webapi/rightClick.mustache +0 -14
  166. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  167. package/docs/webapi/saveScreenshot.mustache +0 -12
  168. package/docs/webapi/say.mustache +0 -10
  169. package/docs/webapi/scrollIntoView.mustache +0 -11
  170. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  171. package/docs/webapi/scrollPageToTop.mustache +0 -6
  172. package/docs/webapi/scrollTo.mustache +0 -12
  173. package/docs/webapi/see.mustache +0 -11
  174. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  175. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  176. package/docs/webapi/seeCookie.mustache +0 -8
  177. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  178. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  179. package/docs/webapi/seeElement.mustache +0 -8
  180. package/docs/webapi/seeElementInDOM.mustache +0 -8
  181. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  182. package/docs/webapi/seeInField.mustache +0 -12
  183. package/docs/webapi/seeInPopup.mustache +0 -8
  184. package/docs/webapi/seeInSource.mustache +0 -7
  185. package/docs/webapi/seeInTitle.mustache +0 -8
  186. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  187. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  188. package/docs/webapi/seeTextEquals.mustache +0 -9
  189. package/docs/webapi/seeTitleEquals.mustache +0 -8
  190. package/docs/webapi/selectOption.mustache +0 -21
  191. package/docs/webapi/setCookie.mustache +0 -16
  192. package/docs/webapi/setGeoLocation.mustache +0 -12
  193. package/docs/webapi/switchTo.mustache +0 -9
  194. package/docs/webapi/switchToNextTab.mustache +0 -10
  195. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  196. package/docs/webapi/type.mustache +0 -21
  197. package/docs/webapi/uncheckOption.mustache +0 -13
  198. package/docs/webapi/wait.mustache +0 -8
  199. package/docs/webapi/waitForClickable.mustache +0 -11
  200. package/docs/webapi/waitForDetached.mustache +0 -10
  201. package/docs/webapi/waitForElement.mustache +0 -11
  202. package/docs/webapi/waitForEnabled.mustache +0 -6
  203. package/docs/webapi/waitForFunction.mustache +0 -17
  204. package/docs/webapi/waitForInvisible.mustache +0 -10
  205. package/docs/webapi/waitForText.mustache +0 -13
  206. package/docs/webapi/waitForValue.mustache +0 -10
  207. package/docs/webapi/waitForVisible.mustache +0 -10
  208. package/docs/webapi/waitInUrl.mustache +0 -9
  209. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  210. package/docs/webapi/waitToHide.mustache +0 -10
  211. package/docs/webapi/waitUrlEquals.mustache +0 -10
  212. package/docs/webdriver.md +0 -655
  213. package/docs/wiki/Books-&-Posts.md +0 -27
  214. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -53
  215. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -61
  216. package/docs/wiki/Examples.md +0 -145
  217. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  218. package/docs/wiki/Home.md +0 -16
  219. package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +0 -83
  220. package/docs/wiki/Release-Process.md +0 -24
  221. package/docs/wiki/Roadmap.md +0 -23
  222. package/docs/wiki/Tests.md +0 -1393
  223. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  224. package/docs/wiki/Videos.md +0 -19
  225. package/lib/helper/extras/PlaywrightReact.js +0 -9
package/docs/parallel.md DELETED
@@ -1,400 +0,0 @@
1
- ---
2
- permalink: /parallel
3
- title: Parallel Execution
4
- ---
5
-
6
- # Parallel Execution
7
-
8
- CodeceptJS has two engines for running tests in parallel:
9
-
10
- * `run-workers` - which spawns [NodeJS Worker](https://nodejs.org/api/worker_threads.html) in a thread. Tests are split by scenarios, scenarios are mixed between groups, each worker runs tests from its own group.
11
- * `run-multiple` - which spawns a subprocess with CodeceptJS. Tests are split by files and configured in `codecept.conf.js`.
12
-
13
- Workers are faster and simpler to start, while `run-multiple` requires additional configuration and can be used to run tests in different browsers at once.
14
-
15
- ## Parallel Execution by Workers
16
-
17
- It is easy to run tests in parallel if you have a lots of tests and free CPU cores. Just execute your tests using `run-workers` command specifying the number of workers to spawn:
18
-
19
- ```
20
- npx codeceptjs run-workers 2
21
- ```
22
-
23
- > ℹ Workers require NodeJS >= 11.7
24
-
25
- This command is similar to `run`, however, steps output can't be shown in workers mode, as it is impossible to synchronize steps output from different processes.
26
-
27
- Each worker spins an instance of CodeceptJS, executes a group of tests, and sends back report to the main process.
28
-
29
- By default, the tests are assigned one by one to the available workers this may lead to multiple execution of `BeforeSuite()`. Use the option `--suites` to assign the suites one by one to the workers.
30
-
31
- ```sh
32
- npx codeceptjs run-workers --suites 2
33
- ```
34
-
35
- ## Test stats with Parallel Execution by Workers
36
-
37
- ```js
38
- const { event } = require('codeceptjs');
39
-
40
- module.exports = function() {
41
-
42
- event.dispatcher.on(event.workers.result, function (result) {
43
-
44
- console.log(result);
45
-
46
- });
47
- }
48
-
49
- // in console log
50
- FAIL | 7 passed, 1 failed, 1 skipped // 2s
51
- {
52
- "tests": {
53
- "passed": [
54
- {
55
- "type": "test",
56
- "title": "Assert @C3",
57
- "body": "() => { }",
58
- "async": 0,
59
- "sync": true,
60
- "_timeout": 2000,
61
- "_slow": 75,
62
- "_retries": -1,
63
- "timedOut": false,
64
- "_currentRetry": 0,
65
- "pending": false,
66
- "opts": {},
67
- "tags": [
68
- "@C3"
69
- ],
70
- "uid": "xe4q1HdqpRrZG5dPe0JG+A",
71
- "workerIndex": 3,
72
- "retries": -1,
73
- "duration": 493,
74
- "err": null,
75
- "parent": {
76
- "title": "My",
77
- "ctx": {},
78
- "suites": [],
79
- "tests": [],
80
- "root": false,
81
- "pending": false,
82
- "_retries": -1,
83
- "_beforeEach": [],
84
- "_beforeAll": [],
85
- "_afterEach": [],
86
- "_afterAll": [],
87
- "_timeout": 2000,
88
- "_slow": 75,
89
- "_bail": false,
90
- "_onlyTests": [],
91
- "_onlySuites": [],
92
- "delayed": false
93
- },
94
- "steps": [
95
- {
96
- "actor": "I",
97
- "name": "amOnPage",
98
- "status": "success",
99
- "agrs": [
100
- "https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST"
101
- ],
102
- "startedAt": 1698760652610,
103
- "startTime": 1698760652611,
104
- "endTime": 1698760653098,
105
- "finishedAt": 1698760653098,
106
- "duration": 488
107
- },
108
- {
109
- "actor": "I",
110
- "name": "grabCurrentUrl",
111
- "status": "success",
112
- "agrs": [],
113
- "startedAt": 1698760653098,
114
- "startTime": 1698760653098,
115
- "endTime": 1698760653099,
116
- "finishedAt": 1698760653099,
117
- "duration": 1
118
- }
119
- ]
120
- }
121
- ],
122
- "failed": [],
123
- "skipped": []
124
- }
125
- }
126
- ```
127
-
128
- CodeceptJS also exposes the env var `process.env.RUNS_WITH_WORKERS` when running tests with `run-workers` command so that you could handle the events better in your plugins/helpers
129
-
130
- ```js
131
- const { event } = require('codeceptjs');
132
-
133
- module.exports = function() {
134
- // this event would trigger the `_publishResultsToTestrail` when running `run-workers` command
135
- event.dispatcher.on(event.workers.result, async () => {
136
- await _publishResultsToTestrail();
137
- });
138
-
139
- // this event would not trigger the `_publishResultsToTestrail` multiple times when running `run-workers` command
140
- event.dispatcher.on(event.all.result, async () => {
141
- // when running `run` command, this env var is undefined
142
- if (!process.env.RUNS_WITH_WORKERS) await _publishResultsToTestrail();
143
- });
144
- }
145
- ```
146
-
147
- ## Parallel Execution by Workers on Multiple Browsers
148
-
149
- To run tests in parallel across multiple browsers, modify your `codecept.conf.js` file to configure multiple browsers on which you want to run your tests and your tests will run across multiple browsers.
150
-
151
- Start with modifying the `codecept.conf.js` file. Add multiple key inside the config which will be used to configure multiple profiles.
152
-
153
- ```
154
- exports.config = {
155
- helpers: {
156
- WebDriver: {
157
- url: 'http://localhost:3000',
158
- desiredCapabilties: {}
159
- }
160
- },
161
- multiple: {
162
- profile1: {
163
- browsers: [
164
- {
165
- browser: "firefox",
166
- desiredCapabilties: {
167
- // override capabilties related to firefox
168
- }
169
- },
170
- {
171
- browser: "chrome",
172
- desiredCapabilties: {
173
- // override capabilties related to chrome
174
- }
175
- }
176
- ]
177
- },
178
- profile2: {
179
- browsers: [
180
- {
181
- browser: "safari",
182
- desiredCapabilties: {
183
- // override capabilties related to safari
184
- }
185
- }
186
- ]
187
- }
188
- }
189
- };
190
- ```
191
- To trigger tests on all the profiles configured, you can use the following command:
192
- ```
193
- npx codeceptjs run-workers 3 all -c codecept.conf.js
194
- ```
195
- This will run your tests across all browsers configured from profile1 & profile2 on 3 workers.
196
-
197
- To trigger tests on specific profile, you can use the following command:
198
- ```
199
- npx codeceptjs run-workers 2 profile1 -c codecept.conf.js
200
- ```
201
- This will run your tests across 2 browsers from profile1 on 2 workers.
202
-
203
- ## Custom Parallel Execution
204
-
205
- To get a full control of parallelization create a custom execution script to match your needs.
206
- This way you can configure which tests are matched, how the groups are formed, and with which configuration each worker is executed.
207
-
208
- Start with creating file `bin/parallel.js`.
209
-
210
- On MacOS/Linux run following commands:
211
-
212
- ```
213
- mkdir bin
214
- touch bin/parallel.js
215
- chmod +x bin/parallel.js
216
- ```
217
-
218
- > Filename or directory can be customized. You are creating your own custom runner so take this paragraph as an example.
219
-
220
- Create a placeholder in file:
221
-
222
- ```js
223
- #!/usr/bin/env node
224
- const { Workers, event } = require('codeceptjs');
225
- // here will go magic
226
- ```
227
-
228
- Now let's see how to update this file for different parallelization modes:
229
-
230
- ### Example: Running tests in 2 browsers in 4 threads
231
-
232
- ```js
233
- const workerConfig = {
234
- testConfig: './test/data/sandbox/codecept.customworker.js',
235
- };
236
-
237
- // don't initialize workers in constructor
238
- const workers = new Workers(null, workerConfig);
239
- // split tests by suites in 2 groups
240
- const testGroups = workers.createGroupsOfSuites(2);
241
-
242
- const browsers = ['firefox', 'chrome'];
243
-
244
- const configs = browsers.map(browser => {
245
- return {
246
- helpers: {
247
- WebDriver: { browser }
248
- }
249
- };
250
- });
251
-
252
- for (const config of configs) {
253
- for (group of testGroups) {
254
- const worker = workers.spawn();
255
- worker.addTests(group);
256
- worker.addConfig(config);
257
- }
258
- }
259
-
260
- // Listen events for failed test
261
- workers.on(event.test.failed, (failedTest) => {
262
- console.log('Failed : ', failedTest.title);
263
- });
264
-
265
- // Listen events for passed test
266
- workers.on(event.test.passed, (successTest) => {
267
- console.log('Passed : ', successTest.title);
268
- });
269
-
270
- // test run status will also be available in event
271
- workers.on(event.all.result, () => {
272
- // Use printResults() to display result with standard style
273
- workers.printResults();
274
- });
275
-
276
- // run workers as async function
277
- runWorkers();
278
-
279
- async function runWorkers() {
280
- try {
281
- // run bootstrapAll
282
- await workers.bootstrapAll();
283
- // run tests
284
- await workers.run();
285
- } finally {
286
- // run teardown All
287
- await workers.teardownAll();
288
- }
289
- }
290
- ```
291
-
292
- Inside `event.all.result` you can obtain test results from all workers, so you can customize the report:
293
-
294
- ```js
295
- workers.on(event.all.result, (status, completedTests, workerStats) => {
296
- // print output
297
- console.log('Test status : ', status ? 'Passes' : 'Failed ');
298
-
299
- // print stats
300
- console.log(`Total tests : ${workerStats.tests}`);
301
- console.log(`Passed tests : ${workerStats.passes}`);
302
- console.log(`Failed test tests : ${workerStats.failures}`);
303
-
304
- // If you don't want to listen for failed and passed test separately, use completedTests object
305
- for (const test of Object.values(completedTests)) {
306
- console.log(`Test status: ${test.err===null}, `, `Test : ${test.title}`);
307
- }
308
- }
309
- ```
310
-
311
- ### Example: Running Tests Split By A Custom Function
312
-
313
- If you want your tests to split according to your need this method is suited for you. For example: If you have 4 long running test files and 4 normal test files there chance all 4 tests end up in same worker thread. For these cases custom function will be helpful.
314
-
315
- ```js
316
-
317
- /*
318
- Define a function to split your tests.
319
-
320
- function should return an array with this format [[file1, file2], [file3], ...]
321
-
322
- where file1 and file2 will run in a worker thread and file3 will run in a worker thread
323
- */
324
- const splitTests = () => {
325
- const files = [
326
- ['./test/data/sandbox/guthub_test.js', './test/data/sandbox/devto_test.js'],
327
- ['./test/data/sandbox/longrunnig_test.js']
328
- ];
329
-
330
- return files;
331
- }
332
-
333
- const workerConfig = {
334
- testConfig: './test/data/sandbox/codecept.customworker.js',
335
- by: splitTests
336
- };
337
-
338
- // don't initialize workers in constructor
339
- const customWorkers = new Workers(null, workerConfig);
340
-
341
- customWorkers.run();
342
-
343
- // You can use event listeners similar to above example.
344
- customWorkers.on(event.all.result, () => {
345
- workers.printResults();
346
- });
347
- ```
348
-
349
- ### Emitting messages to the parent worker
350
-
351
- Child workers can send non-test events to the main process. This is useful if you want to pass along information not related to the tests event cycles itself such as `event.test.success`.
352
-
353
- ```js
354
- // inside main process
355
- // listen for any non test related events
356
- workers.on('message', (data) => {
357
- console.log(data)
358
- });
359
-
360
- workers.on(event.all.result, (status, completedTests, workerStats) => {
361
- // logic
362
- });
363
- ```
364
-
365
- ## Sharing Data Between Workers
366
-
367
- NodeJS Workers can communicate between each other via messaging system. It may happen that you want to pass some data from one of the workers to other. For instance, you may want to share user credentials accross all tests. Data will be appended to a container.
368
-
369
- However, you can't access uninitialized data from a container, so to start, you need to initialize data first. Inside `bootstrap` function of the config we execute the `share` to initialize value:
370
-
371
-
372
- ```js
373
- // inside codecept.conf.js
374
- exports.config = {
375
- bootstrap() {
376
- // append empty userData to container
377
- share({ userData: false });
378
- }
379
- }
380
- ```
381
-
382
- Now each worker has `userData` inside a container. However, it is empty.
383
- When you obtain real data in one of the tests you can now `share` this data accross tests. Use `inject` function to access data inside a container:
384
-
385
- ```js
386
- // get current value of userData
387
- let { userData } = inject();
388
- // if userData is still empty - update it
389
- if (!userData) {
390
- userData = { name: 'user', password: '123456' };
391
- // now new userData will be shared accross all workers
392
- share({userData : userData});
393
- }
394
- ```
395
-
396
- If you want to share data only within same worker, and not across all workers, you need to add option `local: true` every time you run `share`
397
-
398
- ```js
399
- share({ userData: false }, {local: true });
400
- ```