codeceptjs 3.5.12-beta.5 → 3.5.12-beta.7

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 (217) hide show
  1. package/lib/helper/MockServer.js +215 -0
  2. package/lib/helper/Playwright.js +43 -22
  3. package/lib/helper/Puppeteer.js +25 -6
  4. package/lib/helper/WebDriver.js +25 -4
  5. package/lib/helper/errors/ElementAssertion.js +38 -0
  6. package/package.json +6 -5
  7. package/typings/index.d.ts +16 -0
  8. package/typings/promiseBasedTypes.d.ts +182 -0
  9. package/typings/types.d.ts +182 -0
  10. package/docs/advanced.md +0 -351
  11. package/docs/ai.md +0 -248
  12. package/docs/api.md +0 -323
  13. package/docs/basics.md +0 -979
  14. package/docs/bdd.md +0 -539
  15. package/docs/best.md +0 -237
  16. package/docs/books.md +0 -37
  17. package/docs/bootstrap.md +0 -135
  18. package/docs/build/ApiDataFactory.js +0 -410
  19. package/docs/build/Appium.js +0 -2027
  20. package/docs/build/Expect.js +0 -422
  21. package/docs/build/FileSystem.js +0 -228
  22. package/docs/build/GraphQL.js +0 -229
  23. package/docs/build/GraphQLDataFactory.js +0 -309
  24. package/docs/build/JSONResponse.js +0 -338
  25. package/docs/build/Mochawesome.js +0 -71
  26. package/docs/build/Nightmare.js +0 -2152
  27. package/docs/build/OpenAI.js +0 -126
  28. package/docs/build/Playwright.js +0 -5110
  29. package/docs/build/Protractor.js +0 -2706
  30. package/docs/build/Puppeteer.js +0 -3905
  31. package/docs/build/REST.js +0 -344
  32. package/docs/build/TestCafe.js +0 -2125
  33. package/docs/build/WebDriver.js +0 -4240
  34. package/docs/changelog.md +0 -2572
  35. package/docs/commands.md +0 -266
  36. package/docs/community-helpers.md +0 -58
  37. package/docs/configuration.md +0 -157
  38. package/docs/continuous-integration.md +0 -22
  39. package/docs/custom-helpers.md +0 -306
  40. package/docs/data.md +0 -379
  41. package/docs/detox.md +0 -235
  42. package/docs/docker.md +0 -136
  43. package/docs/email.md +0 -183
  44. package/docs/examples.md +0 -149
  45. package/docs/helpers/ApiDataFactory.md +0 -266
  46. package/docs/helpers/Appium.md +0 -1374
  47. package/docs/helpers/Detox.md +0 -586
  48. package/docs/helpers/Expect.md +0 -275
  49. package/docs/helpers/FileSystem.md +0 -152
  50. package/docs/helpers/GraphQL.md +0 -151
  51. package/docs/helpers/GraphQLDataFactory.md +0 -226
  52. package/docs/helpers/JSONResponse.md +0 -254
  53. package/docs/helpers/Mochawesome.md +0 -8
  54. package/docs/helpers/MockRequest.md +0 -377
  55. package/docs/helpers/Nightmare.md +0 -1305
  56. package/docs/helpers/OpenAI.md +0 -70
  57. package/docs/helpers/Playwright.md +0 -2759
  58. package/docs/helpers/Polly.md +0 -44
  59. package/docs/helpers/Protractor.md +0 -1769
  60. package/docs/helpers/Puppeteer-firefox.md +0 -86
  61. package/docs/helpers/Puppeteer.md +0 -2317
  62. package/docs/helpers/REST.md +0 -218
  63. package/docs/helpers/TestCafe.md +0 -1321
  64. package/docs/helpers/WebDriver.md +0 -2547
  65. package/docs/hooks.md +0 -340
  66. package/docs/index.md +0 -111
  67. package/docs/installation.md +0 -75
  68. package/docs/internal-api.md +0 -266
  69. package/docs/locators.md +0 -339
  70. package/docs/mobile-react-native-locators.md +0 -67
  71. package/docs/mobile.md +0 -338
  72. package/docs/pageobjects.md +0 -291
  73. package/docs/parallel.md +0 -400
  74. package/docs/playwright.md +0 -632
  75. package/docs/plugins.md +0 -1259
  76. package/docs/puppeteer.md +0 -316
  77. package/docs/quickstart.md +0 -162
  78. package/docs/react.md +0 -70
  79. package/docs/reports.md +0 -392
  80. package/docs/secrets.md +0 -36
  81. package/docs/shadow.md +0 -68
  82. package/docs/shared/keys.mustache +0 -31
  83. package/docs/shared/react.mustache +0 -1
  84. package/docs/testcafe.md +0 -174
  85. package/docs/translation.md +0 -247
  86. package/docs/tutorial.md +0 -271
  87. package/docs/typescript.md +0 -180
  88. package/docs/ui.md +0 -59
  89. package/docs/videos.md +0 -28
  90. package/docs/visual.md +0 -202
  91. package/docs/vue.md +0 -143
  92. package/docs/webapi/amOnPage.mustache +0 -11
  93. package/docs/webapi/appendField.mustache +0 -11
  94. package/docs/webapi/attachFile.mustache +0 -12
  95. package/docs/webapi/blur.mustache +0 -18
  96. package/docs/webapi/checkOption.mustache +0 -13
  97. package/docs/webapi/clearCookie.mustache +0 -9
  98. package/docs/webapi/clearField.mustache +0 -9
  99. package/docs/webapi/click.mustache +0 -25
  100. package/docs/webapi/clickLink.mustache +0 -8
  101. package/docs/webapi/closeCurrentTab.mustache +0 -7
  102. package/docs/webapi/closeOtherTabs.mustache +0 -8
  103. package/docs/webapi/dontSee.mustache +0 -11
  104. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  105. package/docs/webapi/dontSeeCookie.mustache +0 -8
  106. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  107. package/docs/webapi/dontSeeElement.mustache +0 -8
  108. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  109. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  110. package/docs/webapi/dontSeeInField.mustache +0 -11
  111. package/docs/webapi/dontSeeInSource.mustache +0 -8
  112. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  113. package/docs/webapi/doubleClick.mustache +0 -13
  114. package/docs/webapi/downloadFile.mustache +0 -12
  115. package/docs/webapi/dragAndDrop.mustache +0 -9
  116. package/docs/webapi/dragSlider.mustache +0 -11
  117. package/docs/webapi/executeAsyncScript.mustache +0 -24
  118. package/docs/webapi/executeScript.mustache +0 -26
  119. package/docs/webapi/fillField.mustache +0 -16
  120. package/docs/webapi/focus.mustache +0 -13
  121. package/docs/webapi/forceClick.mustache +0 -28
  122. package/docs/webapi/forceRightClick.mustache +0 -18
  123. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  124. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  125. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  126. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  127. package/docs/webapi/grabCookie.mustache +0 -11
  128. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  129. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  130. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  131. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  132. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  133. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  134. package/docs/webapi/grabGeoLocation.mustache +0 -8
  135. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  136. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  137. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  138. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  139. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  140. package/docs/webapi/grabPopupText.mustache +0 -5
  141. package/docs/webapi/grabSource.mustache +0 -8
  142. package/docs/webapi/grabTextFrom.mustache +0 -10
  143. package/docs/webapi/grabTextFromAll.mustache +0 -9
  144. package/docs/webapi/grabTitle.mustache +0 -8
  145. package/docs/webapi/grabValueFrom.mustache +0 -9
  146. package/docs/webapi/grabValueFromAll.mustache +0 -8
  147. package/docs/webapi/grabWebElement.mustache +0 -9
  148. package/docs/webapi/grabWebElements.mustache +0 -9
  149. package/docs/webapi/moveCursorTo.mustache +0 -12
  150. package/docs/webapi/openNewTab.mustache +0 -7
  151. package/docs/webapi/pressKey.mustache +0 -12
  152. package/docs/webapi/pressKeyDown.mustache +0 -12
  153. package/docs/webapi/pressKeyUp.mustache +0 -12
  154. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  155. package/docs/webapi/refreshPage.mustache +0 -6
  156. package/docs/webapi/resizeWindow.mustache +0 -6
  157. package/docs/webapi/rightClick.mustache +0 -14
  158. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  159. package/docs/webapi/saveScreenshot.mustache +0 -12
  160. package/docs/webapi/say.mustache +0 -10
  161. package/docs/webapi/scrollIntoView.mustache +0 -11
  162. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  163. package/docs/webapi/scrollPageToTop.mustache +0 -6
  164. package/docs/webapi/scrollTo.mustache +0 -12
  165. package/docs/webapi/see.mustache +0 -11
  166. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  167. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  168. package/docs/webapi/seeCookie.mustache +0 -8
  169. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  170. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  171. package/docs/webapi/seeElement.mustache +0 -8
  172. package/docs/webapi/seeElementInDOM.mustache +0 -8
  173. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  174. package/docs/webapi/seeInField.mustache +0 -12
  175. package/docs/webapi/seeInPopup.mustache +0 -8
  176. package/docs/webapi/seeInSource.mustache +0 -7
  177. package/docs/webapi/seeInTitle.mustache +0 -8
  178. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  179. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  180. package/docs/webapi/seeTextEquals.mustache +0 -9
  181. package/docs/webapi/seeTitleEquals.mustache +0 -8
  182. package/docs/webapi/selectOption.mustache +0 -21
  183. package/docs/webapi/setCookie.mustache +0 -16
  184. package/docs/webapi/setGeoLocation.mustache +0 -12
  185. package/docs/webapi/switchTo.mustache +0 -9
  186. package/docs/webapi/switchToNextTab.mustache +0 -10
  187. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  188. package/docs/webapi/type.mustache +0 -21
  189. package/docs/webapi/uncheckOption.mustache +0 -13
  190. package/docs/webapi/wait.mustache +0 -8
  191. package/docs/webapi/waitForClickable.mustache +0 -11
  192. package/docs/webapi/waitForDetached.mustache +0 -10
  193. package/docs/webapi/waitForElement.mustache +0 -11
  194. package/docs/webapi/waitForEnabled.mustache +0 -6
  195. package/docs/webapi/waitForFunction.mustache +0 -17
  196. package/docs/webapi/waitForInvisible.mustache +0 -10
  197. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  198. package/docs/webapi/waitForText.mustache +0 -13
  199. package/docs/webapi/waitForValue.mustache +0 -10
  200. package/docs/webapi/waitForVisible.mustache +0 -10
  201. package/docs/webapi/waitInUrl.mustache +0 -9
  202. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  203. package/docs/webapi/waitToHide.mustache +0 -10
  204. package/docs/webapi/waitUrlEquals.mustache +0 -10
  205. package/docs/webdriver.md +0 -701
  206. package/docs/wiki/Books-&-Posts.md +0 -27
  207. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -53
  208. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -61
  209. package/docs/wiki/Examples.md +0 -145
  210. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  211. package/docs/wiki/Home.md +0 -16
  212. package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +0 -83
  213. package/docs/wiki/Release-Process.md +0 -24
  214. package/docs/wiki/Roadmap.md +0 -23
  215. package/docs/wiki/Tests.md +0 -1393
  216. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  217. package/docs/wiki/Videos.md +0 -19
@@ -1,338 +0,0 @@
1
- const assert = require('assert');
2
- const chai = require('chai');
3
- const joi = require('joi');
4
- const chaiDeepMatch = require('chai-deep-match');
5
- const Helper = require('@codeceptjs/helper');
6
-
7
- chai.use(chaiDeepMatch);
8
-
9
- const { expect } = chai;
10
-
11
- /**
12
- * This helper allows performing assertions on JSON responses paired with following helpers:
13
- *
14
- * * REST
15
- * * GraphQL
16
- * * Playwright
17
- *
18
- * It can check status codes, response data, response structure.
19
- *
20
- *
21
- * ## Configuration
22
- *
23
- * * `requestHelper` - a helper which will perform requests. `REST` by default, also `Playwright` or `GraphQL` can be used. Custom helpers must have `onResponse` hook in their config, which will be executed when request is performed.
24
- *
25
- * ### Examples
26
- *
27
- * Zero-configuration when paired with REST:
28
- *
29
- * ```js
30
- * // inside codecept.conf.js
31
- *{
32
- * helpers: {
33
- * REST: {
34
- * endpoint: 'http://site.com/api',
35
- * },
36
- * JSONResponse: {}
37
- * }
38
- *}
39
- * ```
40
- * Explicitly setting request helper if you use `makeApiRequest` of Playwright to perform requests and not paired REST:
41
- *
42
- * ```js
43
- * // inside codecept.conf.js
44
- * // ...
45
- * helpers: {
46
- * Playwright: {
47
- * url: 'https://localhost',
48
- * browser: 'chromium',
49
- * },
50
- * JSONResponse: {
51
- * requestHelper: 'Playwright',
52
- * }
53
- * }
54
- * ```
55
- * ## Access From Helpers
56
- *
57
- * If you plan to add custom assertions it is recommended to create a helper that will retrieve response object from JSONResponse:
58
- *
59
- *
60
- * ```js
61
- * // inside custom helper
62
- * const response = this.helpers.JSONResponse.response;
63
- * ```
64
- *
65
- * ## Methods
66
- */
67
- class JSONResponse extends Helper {
68
- constructor(config = {}) {
69
- super(config);
70
- this.options = {
71
- requestHelper: 'REST',
72
- };
73
- this.options = { ...this.options, ...config };
74
- }
75
-
76
- _beforeSuite() {
77
- this.response = null;
78
- if (!this.helpers[this.options.requestHelper]) {
79
- throw new Error(`Error setting JSONResponse, helper ${this.options.requestHelper} is not enabled in config, helpers: ${Object.keys(this.helpers)}`);
80
- }
81
- // connect to REST helper
82
- this.helpers[this.options.requestHelper].config.onResponse = (response) => {
83
- this.response = response;
84
- };
85
- }
86
-
87
- _before() {
88
- this.response = null;
89
- }
90
-
91
- static _checkRequirements() {
92
- try {
93
- require('joi');
94
- require('chai');
95
- } catch (e) {
96
- return ['joi'];
97
- }
98
- }
99
-
100
- /**
101
- * Checks that response code is equal to the provided one
102
- *
103
- * ```js
104
- * I.seeResponseCodeIs(200);
105
- * ```
106
- *
107
- * @param {number} code
108
- */
109
- seeResponseCodeIs(code) {
110
- this._checkResponseReady();
111
- expect(this.response.status).to.eql(code, 'Response code is not the same as expected');
112
- }
113
-
114
- /**
115
- * Checks that response code is not equal to the provided one
116
- *
117
- * ```js
118
- * I.dontSeeResponseCodeIs(500);
119
- * ```
120
- *
121
- * @param {number} code
122
- */
123
- dontSeeResponseCodeIs(code) {
124
- this._checkResponseReady();
125
- expect(this.response.status).not.to.eql(code);
126
- }
127
-
128
- /**
129
- * Checks that the response code is 4xx
130
- */
131
- seeResponseCodeIsClientError() {
132
- this._checkResponseReady();
133
- expect(this.response.status).to.be.gte(400);
134
- expect(this.response.status).to.be.lt(500);
135
- }
136
-
137
- /**
138
- * Checks that the response code is 3xx
139
- */
140
- seeResponseCodeIsRedirection() {
141
- this._checkResponseReady();
142
- expect(this.response.status).to.be.gte(300);
143
- expect(this.response.status).to.be.lt(400);
144
- }
145
-
146
- /**
147
- * Checks that the response code is 5xx
148
- */
149
- seeResponseCodeIsServerError() {
150
- this._checkResponseReady();
151
- expect(this.response.status).to.be.gte(500);
152
- expect(this.response.status).to.be.lt(600);
153
- }
154
-
155
- /**
156
- * Checks that the response code is 2xx
157
- * Use it instead of seeResponseCodeIs(200) if server can return 204 instead.
158
- *
159
- * ```js
160
- * I.seeResponseCodeIsSuccessful();
161
- * ```
162
- */
163
- seeResponseCodeIsSuccessful() {
164
- this._checkResponseReady();
165
- expect(this.response.status).to.be.gte(200);
166
- expect(this.response.status).to.be.lt(300);
167
- }
168
-
169
- /**
170
- * Checks for deep inclusion of a provided json in a response data.
171
- *
172
- * ```js
173
- * // response.data == { user: { name: 'jon', email: 'jon@doe.com' } }
174
- *
175
- * I.seeResponseContainsJson({ user: { email: 'jon@doe.com' } });
176
- * ```
177
- * If an array is received, checks that at least one element contains JSON
178
- * ```js
179
- * // response.data == [{ user: { name: 'jon', email: 'jon@doe.com' } }]
180
- *
181
- * I.seeResponseContainsJson({ user: { email: 'jon@doe.com' } });
182
- * ```
183
- *
184
- * @param {object} json
185
- */
186
- seeResponseContainsJson(json = {}) {
187
- this._checkResponseReady();
188
- if (Array.isArray(this.response.data)) {
189
- let fails = 0;
190
- for (const el of this.response.data) {
191
- try {
192
- expect(el).to.deep.match(json);
193
- } catch (err) {
194
- fails++;
195
- }
196
- }
197
- assert.ok(fails < this.response.data.length, `No elements in array matched ${JSON.stringify(json)}`);
198
- } else {
199
- expect(this.response.data).to.deep.match(json);
200
- }
201
- }
202
-
203
- /**
204
- * Checks for deep inclusion of a provided json in a response data.
205
- *
206
- * ```js
207
- * // response.data == { data: { user: 1 } }
208
- *
209
- * I.dontSeeResponseContainsJson({ user: 2 });
210
- * ```
211
- * If an array is received, checks that no element of array contains json:
212
- * ```js
213
- * // response.data == [{ user: 1 }, { user: 3 }]
214
- *
215
- * I.dontSeeResponseContainsJson({ user: 2 });
216
- * ```
217
- *
218
- * @param {object} json
219
- */
220
- dontSeeResponseContainsJson(json = {}) {
221
- this._checkResponseReady();
222
- if (Array.isArray(this.response.data)) {
223
- this.response.data.forEach(data => expect(data).not.to.deep.match(json));
224
- } else {
225
- expect(this.response.data).not.to.deep.match(json);
226
- }
227
- }
228
-
229
- /**
230
- * Checks for deep inclusion of a provided json in a response data.
231
- *
232
- * ```js
233
- * // response.data == { user: { name: 'jon', email: 'jon@doe.com' } }
234
- *
235
- * I.seeResponseContainsKeys(['user']);
236
- * ```
237
- *
238
- * If an array is received, check is performed for each element of array:
239
- *
240
- * ```js
241
- * // response.data == [{ user: 'jon' }, { user: 'matt'}]
242
- *
243
- * I.seeResponseContainsKeys(['user']);
244
- * ```
245
- *
246
- * @param {array} keys
247
- */
248
- seeResponseContainsKeys(keys = []) {
249
- this._checkResponseReady();
250
- if (Array.isArray(this.response.data)) {
251
- this.response.data.forEach(data => expect(data).to.include.keys(keys));
252
- } else {
253
- expect(this.response.data).to.include.keys(keys);
254
- }
255
- }
256
-
257
- /**
258
- * Executes a callback function passing in `response` object and chai assertions with `expect`
259
- * Use it to perform custom checks of response data
260
- *
261
- * ```js
262
- * I.seeResponseValidByCallback(({ data, status, expect }) => {
263
- * expect(status).to.eql(200);
264
- * expect(data).keys.to.include(['user', 'company']);
265
- * });
266
- * ```
267
- *
268
- * @param {function} fn
269
- */
270
- seeResponseValidByCallback(fn) {
271
- this._checkResponseReady();
272
- fn({ ...this.response, expect });
273
- const body = fn.toString();
274
- fn.toString = () => `${body.split('\n')[1]}...`;
275
- }
276
-
277
- /**
278
- * Checks that response data equals to expected:
279
- *
280
- * ```js
281
- * // response.data is { error: 'Not allowed' }
282
- *
283
- * I.seeResponseEquals({ error: 'Not allowed' })
284
- * ```
285
- * @param {object} resp
286
- */
287
- seeResponseEquals(resp) {
288
- this._checkResponseReady();
289
- expect(this.response.data).to.deep.equal(resp);
290
- }
291
-
292
- /**
293
- * Validates JSON structure of response using [joi library](https://joi.dev).
294
- * See [joi API](https://joi.dev/api/) for complete reference on usage.
295
- *
296
- * Use pre-initialized joi instance by passing function callback:
297
- *
298
- * ```js
299
- * // response.data is { name: 'jon', id: 1 }
300
- *
301
- * I.seeResponseMatchesJsonSchema(joi => {
302
- * return joi.object({
303
- * name: joi.string(),
304
- * id: joi.number()
305
- * })
306
- * });
307
- *
308
- * // or pass a valid schema
309
- * const joi = require('joi');
310
- *
311
- * I.seeResponseMatchesJsonSchema(joi.object({
312
- * name: joi.string(),
313
- * id: joi.number();
314
- * });
315
- * ```
316
- *
317
- * @param {any} fnOrSchema
318
- */
319
- seeResponseMatchesJsonSchema(fnOrSchema) {
320
- this._checkResponseReady();
321
- let schema = fnOrSchema;
322
- if (typeof fnOrSchema === 'function') {
323
- schema = fnOrSchema(joi);
324
- const body = fnOrSchema.toString();
325
- fnOrSchema.toString = () => `${body.split('\n')[1]}...`;
326
- }
327
- if (!schema) throw new Error('Empty Joi schema provided, see https://joi.dev/ for details');
328
- if (!joi.isSchema(schema)) throw new Error('Invalid Joi schema provided, see https://joi.dev/ for details');
329
- schema.toString = () => schema.describe();
330
- joi.assert(this.response.data, schema);
331
- }
332
-
333
- _checkResponseReady() {
334
- if (!this.response) throw new Error('Response is not available');
335
- }
336
- }
337
-
338
- module.exports = JSONResponse;
@@ -1,71 +0,0 @@
1
- let addMochawesomeContext;
2
- let currentTest;
3
- let currentSuite;
4
-
5
- const Helper = require('@codeceptjs/helper');
6
- const { clearString } = require('../utils');
7
-
8
- class Mochawesome extends Helper {
9
- constructor(config) {
10
- super(config);
11
-
12
- // set defaults
13
- this.options = {
14
- uniqueScreenshotNames: false,
15
- disableScreenshots: false,
16
- };
17
-
18
- addMochawesomeContext = require('mochawesome/addContext');
19
- this._createConfig(config);
20
- }
21
-
22
- _createConfig(config) {
23
- // override defaults with config
24
- Object.assign(this.options, config);
25
- }
26
-
27
- _beforeSuite(suite) {
28
- currentSuite = suite;
29
- currentTest = '';
30
- }
31
-
32
- _before() {
33
- if (currentSuite && currentSuite.ctx) {
34
- currentTest = { test: currentSuite.ctx.currentTest };
35
- }
36
- }
37
-
38
- _test(test) {
39
- currentTest = { test };
40
- }
41
-
42
- _failed(test) {
43
- if (this.options.disableScreenshots) return;
44
- let fileName;
45
- // Get proper name if we are fail on hook
46
- if (test.ctx.test.type === 'hook') {
47
- currentTest = { test: test.ctx.test };
48
- // ignore retries if we are in hook
49
- test._retries = -1;
50
- fileName = clearString(`${test.title}_${currentTest.test.title}`);
51
- } else {
52
- currentTest = { test };
53
- fileName = clearString(test.title);
54
- }
55
- if (this.options.uniqueScreenshotNames) {
56
- const uuid = test.uuid || test.ctx.test.uuid;
57
- fileName = `${fileName.substring(0, 10)}_${uuid}`;
58
- }
59
- if (test._retries < 1 || test._retries === test.retryNum) {
60
- fileName = `${fileName}.failed.png`;
61
- return addMochawesomeContext(currentTest, fileName);
62
- }
63
- }
64
-
65
- addMochawesomeContext(context) {
66
- if (currentTest === '') currentTest = { test: currentSuite.ctx.test };
67
- return addMochawesomeContext(currentTest, context);
68
- }
69
- }
70
-
71
- module.exports = Mochawesome;