codeceptjs 3.5.12-beta.2 → 3.5.12-beta.3

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 (213) hide show
  1. package/lib/locator.js +7 -12
  2. package/package.json +3 -5
  3. package/docs/advanced.md +0 -351
  4. package/docs/ai.md +0 -248
  5. package/docs/api.md +0 -323
  6. package/docs/basics.md +0 -979
  7. package/docs/bdd.md +0 -539
  8. package/docs/best.md +0 -237
  9. package/docs/books.md +0 -37
  10. package/docs/bootstrap.md +0 -135
  11. package/docs/build/ApiDataFactory.js +0 -410
  12. package/docs/build/Appium.js +0 -2027
  13. package/docs/build/Expect.js +0 -422
  14. package/docs/build/FileSystem.js +0 -228
  15. package/docs/build/GraphQL.js +0 -229
  16. package/docs/build/GraphQLDataFactory.js +0 -309
  17. package/docs/build/JSONResponse.js +0 -338
  18. package/docs/build/Mochawesome.js +0 -71
  19. package/docs/build/Nightmare.js +0 -2152
  20. package/docs/build/OpenAI.js +0 -126
  21. package/docs/build/Playwright.js +0 -5110
  22. package/docs/build/Protractor.js +0 -2706
  23. package/docs/build/Puppeteer.js +0 -3905
  24. package/docs/build/REST.js +0 -344
  25. package/docs/build/TestCafe.js +0 -2125
  26. package/docs/build/WebDriver.js +0 -4240
  27. package/docs/changelog.md +0 -2572
  28. package/docs/commands.md +0 -266
  29. package/docs/community-helpers.md +0 -58
  30. package/docs/configuration.md +0 -157
  31. package/docs/continuous-integration.md +0 -22
  32. package/docs/custom-helpers.md +0 -306
  33. package/docs/data.md +0 -379
  34. package/docs/detox.md +0 -235
  35. package/docs/docker.md +0 -136
  36. package/docs/email.md +0 -183
  37. package/docs/examples.md +0 -149
  38. package/docs/helpers/ApiDataFactory.md +0 -266
  39. package/docs/helpers/Appium.md +0 -1374
  40. package/docs/helpers/Detox.md +0 -586
  41. package/docs/helpers/Expect.md +0 -275
  42. package/docs/helpers/FileSystem.md +0 -152
  43. package/docs/helpers/GraphQL.md +0 -151
  44. package/docs/helpers/GraphQLDataFactory.md +0 -226
  45. package/docs/helpers/JSONResponse.md +0 -254
  46. package/docs/helpers/Mochawesome.md +0 -8
  47. package/docs/helpers/MockRequest.md +0 -377
  48. package/docs/helpers/Nightmare.md +0 -1305
  49. package/docs/helpers/OpenAI.md +0 -70
  50. package/docs/helpers/Playwright.md +0 -2759
  51. package/docs/helpers/Polly.md +0 -44
  52. package/docs/helpers/Protractor.md +0 -1769
  53. package/docs/helpers/Puppeteer-firefox.md +0 -86
  54. package/docs/helpers/Puppeteer.md +0 -2317
  55. package/docs/helpers/REST.md +0 -218
  56. package/docs/helpers/TestCafe.md +0 -1321
  57. package/docs/helpers/WebDriver.md +0 -2547
  58. package/docs/hooks.md +0 -340
  59. package/docs/index.md +0 -111
  60. package/docs/installation.md +0 -75
  61. package/docs/internal-api.md +0 -266
  62. package/docs/locators.md +0 -339
  63. package/docs/mobile-react-native-locators.md +0 -67
  64. package/docs/mobile.md +0 -338
  65. package/docs/pageobjects.md +0 -291
  66. package/docs/parallel.md +0 -400
  67. package/docs/playwright.md +0 -632
  68. package/docs/plugins.md +0 -1259
  69. package/docs/puppeteer.md +0 -316
  70. package/docs/quickstart.md +0 -162
  71. package/docs/react.md +0 -70
  72. package/docs/reports.md +0 -392
  73. package/docs/secrets.md +0 -36
  74. package/docs/shadow.md +0 -68
  75. package/docs/shared/keys.mustache +0 -31
  76. package/docs/shared/react.mustache +0 -1
  77. package/docs/testcafe.md +0 -174
  78. package/docs/translation.md +0 -247
  79. package/docs/tutorial.md +0 -271
  80. package/docs/typescript.md +0 -180
  81. package/docs/ui.md +0 -59
  82. package/docs/videos.md +0 -28
  83. package/docs/visual.md +0 -202
  84. package/docs/vue.md +0 -143
  85. package/docs/webapi/amOnPage.mustache +0 -11
  86. package/docs/webapi/appendField.mustache +0 -11
  87. package/docs/webapi/attachFile.mustache +0 -12
  88. package/docs/webapi/blur.mustache +0 -18
  89. package/docs/webapi/checkOption.mustache +0 -13
  90. package/docs/webapi/clearCookie.mustache +0 -9
  91. package/docs/webapi/clearField.mustache +0 -9
  92. package/docs/webapi/click.mustache +0 -25
  93. package/docs/webapi/clickLink.mustache +0 -8
  94. package/docs/webapi/closeCurrentTab.mustache +0 -7
  95. package/docs/webapi/closeOtherTabs.mustache +0 -8
  96. package/docs/webapi/dontSee.mustache +0 -11
  97. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  98. package/docs/webapi/dontSeeCookie.mustache +0 -8
  99. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  100. package/docs/webapi/dontSeeElement.mustache +0 -8
  101. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  102. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  103. package/docs/webapi/dontSeeInField.mustache +0 -11
  104. package/docs/webapi/dontSeeInSource.mustache +0 -8
  105. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  106. package/docs/webapi/doubleClick.mustache +0 -13
  107. package/docs/webapi/downloadFile.mustache +0 -12
  108. package/docs/webapi/dragAndDrop.mustache +0 -9
  109. package/docs/webapi/dragSlider.mustache +0 -11
  110. package/docs/webapi/executeAsyncScript.mustache +0 -24
  111. package/docs/webapi/executeScript.mustache +0 -26
  112. package/docs/webapi/fillField.mustache +0 -16
  113. package/docs/webapi/focus.mustache +0 -13
  114. package/docs/webapi/forceClick.mustache +0 -28
  115. package/docs/webapi/forceRightClick.mustache +0 -18
  116. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  117. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  118. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  119. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  120. package/docs/webapi/grabCookie.mustache +0 -11
  121. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  122. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  123. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  124. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  125. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  126. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  127. package/docs/webapi/grabGeoLocation.mustache +0 -8
  128. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  129. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  130. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  131. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  132. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  133. package/docs/webapi/grabPopupText.mustache +0 -5
  134. package/docs/webapi/grabSource.mustache +0 -8
  135. package/docs/webapi/grabTextFrom.mustache +0 -10
  136. package/docs/webapi/grabTextFromAll.mustache +0 -9
  137. package/docs/webapi/grabTitle.mustache +0 -8
  138. package/docs/webapi/grabValueFrom.mustache +0 -9
  139. package/docs/webapi/grabValueFromAll.mustache +0 -8
  140. package/docs/webapi/grabWebElement.mustache +0 -9
  141. package/docs/webapi/grabWebElements.mustache +0 -9
  142. package/docs/webapi/moveCursorTo.mustache +0 -12
  143. package/docs/webapi/openNewTab.mustache +0 -7
  144. package/docs/webapi/pressKey.mustache +0 -12
  145. package/docs/webapi/pressKeyDown.mustache +0 -12
  146. package/docs/webapi/pressKeyUp.mustache +0 -12
  147. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  148. package/docs/webapi/refreshPage.mustache +0 -6
  149. package/docs/webapi/resizeWindow.mustache +0 -6
  150. package/docs/webapi/rightClick.mustache +0 -14
  151. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  152. package/docs/webapi/saveScreenshot.mustache +0 -12
  153. package/docs/webapi/say.mustache +0 -10
  154. package/docs/webapi/scrollIntoView.mustache +0 -11
  155. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  156. package/docs/webapi/scrollPageToTop.mustache +0 -6
  157. package/docs/webapi/scrollTo.mustache +0 -12
  158. package/docs/webapi/see.mustache +0 -11
  159. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  160. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  161. package/docs/webapi/seeCookie.mustache +0 -8
  162. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  163. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  164. package/docs/webapi/seeElement.mustache +0 -8
  165. package/docs/webapi/seeElementInDOM.mustache +0 -8
  166. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  167. package/docs/webapi/seeInField.mustache +0 -12
  168. package/docs/webapi/seeInPopup.mustache +0 -8
  169. package/docs/webapi/seeInSource.mustache +0 -7
  170. package/docs/webapi/seeInTitle.mustache +0 -8
  171. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  172. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  173. package/docs/webapi/seeTextEquals.mustache +0 -9
  174. package/docs/webapi/seeTitleEquals.mustache +0 -8
  175. package/docs/webapi/selectOption.mustache +0 -21
  176. package/docs/webapi/setCookie.mustache +0 -16
  177. package/docs/webapi/setGeoLocation.mustache +0 -12
  178. package/docs/webapi/switchTo.mustache +0 -9
  179. package/docs/webapi/switchToNextTab.mustache +0 -10
  180. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  181. package/docs/webapi/type.mustache +0 -21
  182. package/docs/webapi/uncheckOption.mustache +0 -13
  183. package/docs/webapi/wait.mustache +0 -8
  184. package/docs/webapi/waitForClickable.mustache +0 -11
  185. package/docs/webapi/waitForDetached.mustache +0 -10
  186. package/docs/webapi/waitForElement.mustache +0 -11
  187. package/docs/webapi/waitForEnabled.mustache +0 -6
  188. package/docs/webapi/waitForFunction.mustache +0 -17
  189. package/docs/webapi/waitForInvisible.mustache +0 -10
  190. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  191. package/docs/webapi/waitForText.mustache +0 -13
  192. package/docs/webapi/waitForValue.mustache +0 -10
  193. package/docs/webapi/waitForVisible.mustache +0 -10
  194. package/docs/webapi/waitInUrl.mustache +0 -9
  195. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  196. package/docs/webapi/waitToHide.mustache +0 -10
  197. package/docs/webapi/waitUrlEquals.mustache +0 -10
  198. package/docs/webdriver.md +0 -701
  199. package/docs/wiki/Books-&-Posts.md +0 -27
  200. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -53
  201. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -61
  202. package/docs/wiki/Examples.md +0 -145
  203. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  204. package/docs/wiki/Home.md +0 -16
  205. package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +0 -83
  206. package/docs/wiki/Release-Process.md +0 -24
  207. package/docs/wiki/Roadmap.md +0 -23
  208. package/docs/wiki/Tests.md +0 -1393
  209. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  210. package/docs/wiki/Videos.md +0 -19
  211. package/lib/css2xpath/js/css_to_xpath.js +0 -20
  212. package/lib/css2xpath/js/expression.js +0 -23
  213. package/lib/css2xpath/js/renderer.js +0 -239
@@ -1,422 +0,0 @@
1
- const chai = require('chai');
2
- const output = require('../output');
3
-
4
- const { expect } = chai;
5
-
6
- chai.use(require('chai-string'));
7
- // @ts-ignore
8
- chai.use(require('chai-exclude'));
9
- chai.use(require('chai-match-pattern'));
10
-
11
- /**
12
- * This helper allows performing assertions based on Chai.
13
- *
14
- * ### Examples
15
- *
16
- * Zero-configuration when paired with other helpers like REST, Playwright:
17
- *
18
- * ```js
19
- * // inside codecept.conf.js
20
- *{
21
- * helpers: {
22
- * Playwright: {...},
23
- * Expect: {},
24
- * }
25
- *}
26
- * ```
27
- *
28
- * ## Methods
29
- */
30
- class ExpectHelper {
31
- /**
32
- *
33
- * @param {*} actualValue
34
- * @param {*} expectedValue
35
- * @param {*} [customErrorMsg]
36
- */
37
- expectEqual(actualValue, expectedValue, customErrorMsg = '') {
38
- // @ts-ignore
39
- output.step(`I expect "${JSON.stringify(actualValue)}" to equal "${JSON.stringify(expectedValue)}"`);
40
- return expect(actualValue, customErrorMsg).to.equal(expectedValue);
41
- }
42
-
43
- /**
44
- *
45
- * @param {*} actualValue
46
- * @param {*} expectedValue
47
- * @param {*} [customErrorMsg]
48
- */
49
- expectNotEqual(actualValue, expectedValue, customErrorMsg = '') {
50
- // @ts-ignore
51
- output.step(`I expect "${JSON.stringify(actualValue)}" to not equal "${JSON.stringify(expectedValue)}"`);
52
- return expect(actualValue, customErrorMsg).not.to.equal(expectedValue);
53
- }
54
-
55
- /**
56
- *
57
- * @param {*} actualValue
58
- * @param {*} expectedValue
59
- * @param {*} [customErrorMsg]
60
-
61
- */
62
- expectDeepEqual(actualValue, expectedValue, customErrorMsg = '') {
63
- // @ts-ignore
64
- output.step(`I expect "${JSON.stringify(actualValue)}" to deep equal "${JSON.stringify(expectedValue)}"`);
65
- return expect(actualValue, customErrorMsg).to.deep.equal(expectedValue);
66
- }
67
-
68
- /**
69
- *
70
- * @param {*} actualValue
71
- * @param {*} expectedValue
72
- * @param {*} [customErrorMsg]
73
- */
74
- expectNotDeepEqual(actualValue, expectedValue, customErrorMsg = '') {
75
- // @ts-ignore
76
- output.step(`I expect "${JSON.stringify(actualValue)}" to not deep equal "${JSON.stringify(expectedValue)}"`);
77
- return expect(actualValue, customErrorMsg).to.not.deep.equal(expectedValue);
78
- }
79
-
80
- /**
81
- *
82
- * @param {*} actualValue
83
- * @param {*} expectedValueToContain
84
- * @param {*} [customErrorMsg]
85
- */
86
- expectContain(actualValue, expectedValueToContain, customErrorMsg = '') {
87
- // @ts-ignore
88
- output.step(`I expect "${JSON.stringify(actualValue)}" to contain "${JSON.stringify(expectedValueToContain)}"`);
89
- return expect(actualValue, customErrorMsg).to.contain(
90
- expectedValueToContain,
91
- );
92
- }
93
-
94
- /**
95
- *
96
- * @param {*} actualValue
97
- * @param {*} expectedValueToNotContain
98
- * @param {*} [customErrorMsg]
99
- */
100
- expectNotContain(
101
- actualValue,
102
- expectedValueToNotContain,
103
- customErrorMsg = '',
104
- ) {
105
- // @ts-ignore
106
- output.step(`I expect "${JSON.stringify(actualValue)}" to not contain "${JSON.stringify(expectedValueToNotContain)}"`);
107
- return expect(actualValue, customErrorMsg).not.to.contain(
108
- expectedValueToNotContain,
109
- );
110
- }
111
-
112
- /**
113
- *
114
- * @param {*} actualValue
115
- * @param {*} expectedValueToStartWith
116
- * @param {*} [customErrorMsg]
117
- */
118
- expectStartsWith(actualValue, expectedValueToStartWith, customErrorMsg = '') {
119
- // @ts-ignore
120
- output.step(`I expect "${JSON.stringify(actualValue)}" to start with "${JSON.stringify(expectedValueToStartWith)}"`);
121
- return expect(actualValue, customErrorMsg).to.startsWith(
122
- expectedValueToStartWith,
123
- );
124
- }
125
-
126
- /**
127
- *
128
- * @param {*} actualValue
129
- * @param {*} expectedValueToNotStartWith
130
- * @param {*} [customErrorMsg]
131
- */
132
- expectNotStartsWith(
133
- actualValue,
134
- expectedValueToNotStartWith,
135
- customErrorMsg = '',
136
- ) {
137
- // @ts-ignore
138
- output.step(`I expect "${JSON.stringify(actualValue)}" to not start with "${JSON.stringify(expectedValueToNotStartWith)}"`);
139
- return expect(actualValue, customErrorMsg).not.to.startsWith(
140
- expectedValueToNotStartWith,
141
- );
142
- }
143
-
144
- /**
145
- * @param {*} actualValue
146
- * @param {*} expectedValueToEndWith
147
- * @param {*} [customErrorMsg]
148
- */
149
- expectEndsWith(actualValue, expectedValueToEndWith, customErrorMsg = '') {
150
- // @ts-ignore
151
- output.step(`I expect "${JSON.stringify(actualValue)}" to end with "${JSON.stringify(expectedValueToEndWith)}"`);
152
- return expect(actualValue, customErrorMsg).to.endsWith(
153
- expectedValueToEndWith,
154
- );
155
- }
156
-
157
- /**
158
- * @param {*} actualValue
159
- * @param {*} expectedValueToNotEndWith
160
- * @param {*} [customErrorMsg]
161
- */
162
- expectNotEndsWith(
163
- actualValue,
164
- expectedValueToNotEndWith,
165
- customErrorMsg = '',
166
- ) {
167
- // @ts-ignore
168
- output.step(`I expect "${JSON.stringify(actualValue)}" to not end with "${JSON.stringify(expectedValueToNotEndWith)}"`);
169
- return expect(actualValue, customErrorMsg).not.to.endsWith(
170
- expectedValueToNotEndWith,
171
- );
172
- }
173
-
174
- /**
175
- * @param {*} targetData
176
- * @param {*} jsonSchema
177
- * @param {*} [customErrorMsg]
178
- */
179
- expectJsonSchema(targetData, jsonSchema, customErrorMsg = '') {
180
- // @ts-ignore
181
- output.step(`I expect "${JSON.stringify(targetData)}" to match this JSON schema "${JSON.stringify(jsonSchema)}"`);
182
- chai.use(require('chai-json-schema'));
183
- return expect(targetData, customErrorMsg).to.be.jsonSchema(jsonSchema);
184
- }
185
-
186
- /**
187
- * @param {*} targetData
188
- * @param {*} jsonSchema
189
- * @param {*} [customErrorMsg]
190
- * @param {*} ajvOptions Pass AJV options
191
- */
192
- expectJsonSchemaUsingAJV(
193
- targetData,
194
- jsonSchema,
195
- customErrorMsg = '',
196
- ajvOptions = { allErrors: true },
197
- ) {
198
- // @ts-ignore
199
- output.step(`I expect "${JSON.stringify(targetData)}" to match this JSON schema using AJV "${JSON.stringify(jsonSchema)}"`);
200
- chai.use(require('chai-json-schema-ajv').create(ajvOptions));
201
- return expect(targetData, customErrorMsg).to.be.jsonSchema(jsonSchema);
202
- }
203
-
204
- /**
205
- * @param {*} targetData
206
- * @param {*} propertyName
207
- * @param {*} [customErrorMsg]
208
- */
209
- expectHasProperty(targetData, propertyName, customErrorMsg = '') {
210
- // @ts-ignore
211
- output.step(`I expect "${JSON.stringify(targetData)}" to have property: "${JSON.stringify(propertyName)}"`);
212
- return expect(targetData, customErrorMsg).to.have.property(propertyName);
213
- }
214
-
215
- /**
216
- * @param {*} targetData
217
- * @param {*} propertyName
218
- * @param {*} [customErrorMsg]
219
- */
220
- expectHasAProperty(targetData, propertyName, customErrorMsg = '') {
221
- // @ts-ignore
222
- output.step(`I expect "${JSON.stringify(targetData)}" to have a property: "${JSON.stringify(propertyName)}"`);
223
- return expect(targetData, customErrorMsg).to.have.a.property(propertyName);
224
- }
225
-
226
- /**
227
- * @param {*} targetData
228
- * @param {*} type
229
- * @param {*} [customErrorMsg]
230
- */
231
- expectToBeA(targetData, type, customErrorMsg = '') {
232
- // @ts-ignore
233
- output.step(`I expect "${JSON.stringify(targetData)}" to be a "${JSON.stringify(type)}"`);
234
- return expect(targetData, customErrorMsg).to.be.a(type);
235
- }
236
-
237
- /**
238
- * @param {*} targetData
239
- * @param {*} type
240
- * @param {*} [customErrorMsg]
241
- */
242
- expectToBeAn(targetData, type, customErrorMsg = '') {
243
- // @ts-ignore
244
- output.step(`I expect "${JSON.stringify(targetData)}" to be an "${JSON.stringify(type)}"`);
245
- return expect(targetData, customErrorMsg).to.be.an(type);
246
- }
247
-
248
- /**
249
- * @param {*} targetData
250
- * @param {*} regex
251
- * @param {*} [customErrorMsg]
252
- */
253
- expectMatchRegex(targetData, regex, customErrorMsg = '') {
254
- // @ts-ignore
255
- output.step(`I expect "${JSON.stringify(targetData)}" to match the regex "${JSON.stringify(regex)}"`);
256
- return expect(targetData, customErrorMsg).to.match(regex);
257
- }
258
-
259
- /**
260
- * @param {*} targetData
261
- * @param {*} length
262
- * @param {*} [customErrorMsg]
263
- */
264
- expectLengthOf(targetData, length, customErrorMsg = '') {
265
- // @ts-ignore
266
- output.step(`I expect "${JSON.stringify(targetData)}" to have length of "${JSON.stringify(length)}"`);
267
- return expect(targetData, customErrorMsg).to.have.lengthOf(length);
268
- }
269
-
270
- /**
271
- * @param {*} targetData
272
- * @param {*} [customErrorMsg]
273
- */
274
- expectEmpty(targetData, customErrorMsg = '') {
275
- // @ts-ignore
276
- output.step(`I expect "${JSON.stringify(targetData)}" to be empty`);
277
- return expect(targetData, customErrorMsg).to.be.empty;
278
- }
279
-
280
- /**
281
- * @param {*} targetData
282
- * @param {*} [customErrorMsg]
283
- */
284
- expectTrue(targetData, customErrorMsg = '') {
285
- // @ts-ignore
286
- output.step(`I expect "${JSON.stringify(targetData)}" to be true`);
287
- return expect(targetData, customErrorMsg).to.be.true;
288
- }
289
-
290
- /**
291
- * @param {*} targetData
292
- * @param {*} [customErrorMsg]
293
- */
294
- expectFalse(targetData, customErrorMsg = '') {
295
- // @ts-ignore
296
- output.step(`I expect "${JSON.stringify(targetData)}" to be false`);
297
- return expect(targetData, customErrorMsg).to.be.false;
298
- }
299
-
300
- /**
301
- * @param {*} targetData
302
- * @param {*} aboveThan
303
- * @param {*} [customErrorMsg]
304
- */
305
- expectAbove(targetData, aboveThan, customErrorMsg = '') {
306
- // @ts-ignore
307
- output.step(`I expect "${JSON.stringify(targetData)}" to be above ${JSON.stringify(aboveThan)}`);
308
- return expect(targetData, customErrorMsg).to.be.above(aboveThan);
309
- }
310
-
311
- /**
312
- * @param {*} targetData
313
- * @param {*} belowThan
314
- * @param {*} [customErrorMsg]
315
- */
316
- expectBelow(targetData, belowThan, customErrorMsg = '') {
317
- // @ts-ignore
318
- output.step(`I expect "${JSON.stringify(targetData)}" to be below ${JSON.stringify(belowThan)}`);
319
- return expect(targetData, customErrorMsg).to.be.below(belowThan);
320
- }
321
-
322
- /**
323
- * @param {*} targetData
324
- * @param {*} lengthAboveThan
325
- * @param {*} [customErrorMsg]
326
- */
327
- expectLengthAboveThan(targetData, lengthAboveThan, customErrorMsg = '') {
328
- // @ts-ignore
329
- output.step(`I expect "${JSON.stringify(targetData)}" to have length of above ${JSON.stringify(lengthAboveThan)}`);
330
- return expect(targetData, customErrorMsg).to.have.lengthOf.above(
331
- lengthAboveThan,
332
- );
333
- }
334
-
335
- /**
336
- * @param {*} targetData
337
- * @param {*} lengthBelowThan
338
- * @param {*} [customErrorMsg]
339
- */
340
- expectLengthBelowThan(targetData, lengthBelowThan, customErrorMsg = '') {
341
- // @ts-ignore
342
- output.step(`I expect "${JSON.stringify(targetData)}" to have length of below ${JSON.stringify(lengthBelowThan)}`);
343
- return expect(targetData, customErrorMsg).to.have.lengthOf.below(
344
- lengthBelowThan,
345
- );
346
- }
347
-
348
- /**
349
- * @param {*} actualValue
350
- * @param {*} expectedValue
351
- * @param {*} [customErrorMsg]
352
- */
353
- expectEqualIgnoreCase(actualValue, expectedValue, customErrorMsg = '') {
354
- // @ts-ignore
355
- output.step(`I expect and ingore case "${JSON.stringify(actualValue)}" to equal "${JSON.stringify(expectedValue)}"`);
356
- return expect(actualValue, customErrorMsg).to.equalIgnoreCase(
357
- expectedValue,
358
- );
359
- }
360
-
361
- /**
362
- * expects members of two arrays are deeply equal
363
- * @param {*} actualValue
364
- * @param {*} expectedValue
365
- * @param {*} [customErrorMsg]
366
- */
367
- expectDeepMembers(actualValue, expectedValue, customErrorMsg = '') {
368
- // @ts-ignore
369
- output.step(`I expect members of "${JSON.stringify(actualValue)}" and "${JSON.stringify(expectedValue)}" arrays are deeply equal`);
370
- return expect(actualValue, customErrorMsg).to.have.deep.members(
371
- expectedValue,
372
- );
373
- }
374
-
375
- /**
376
- * expects an array to be a superset of another array
377
- * @param {*} superset
378
- * @param {*} set
379
- * @param {*} [customErrorMsg]
380
- */
381
- expectDeepIncludeMembers(superset, set, customErrorMsg = '') {
382
- // @ts-ignore
383
- output.step(`I expect "${JSON.stringify(superset)}" array to be a superset of "${JSON.stringify(set)}" array`);
384
- return expect(superset, customErrorMsg).to.deep.include.members(
385
- set,
386
- );
387
- }
388
-
389
- /**
390
- * expects members of two JSON objects are deeply equal excluding some properties
391
- * @param {*} actualValue
392
- * @param {*} expectedValue
393
- * @param {*} fieldsToExclude
394
- * @param {*} [customErrorMsg]
395
- */
396
- expectDeepEqualExcluding(
397
- actualValue,
398
- expectedValue,
399
- fieldsToExclude,
400
- customErrorMsg = '',
401
- ) {
402
- // @ts-ignore
403
- output.step(`I expect members of "${JSON.stringify(actualValue)}" and "${JSON.stringify(expectedValue)}" JSON objects are deeply equal excluding properties: ${JSON.stringify(fieldsToExclude)}`);
404
- return expect(actualValue, customErrorMsg)
405
- .excludingEvery(fieldsToExclude)
406
- .to.deep.equal(expectedValue);
407
- }
408
-
409
- /**
410
- * expects a JSON object matches a provided pattern
411
- * @param {*} actualValue
412
- * @param {*} expectedPattern
413
- * @param {*} [customErrorMsg]
414
- */
415
- expectMatchesPattern(actualValue, expectedPattern, customErrorMsg = '') {
416
- // @ts-ignore
417
- output.step(`I expect "${JSON.stringify(actualValue)}" to match the ${JSON.stringify(expectedPattern)} pattern`);
418
- return expect(actualValue, customErrorMsg).to.matchPattern(expectedPattern);
419
- }
420
- }
421
-
422
- module.exports = ExpectHelper;
@@ -1,228 +0,0 @@
1
- const assert = require('assert');
2
- const path = require('path');
3
- const fs = require('fs');
4
-
5
- const Helper = require('@codeceptjs/helper');
6
- const { fileExists } = require('../utils');
7
- const { fileIncludes } = require('../assert/include');
8
- const { fileEquals } = require('../assert/equal');
9
-
10
- /**
11
- * Helper for testing filesystem.
12
- * Can be easily used to check file structures:
13
- *
14
- * ```js
15
- * I.amInPath('test');
16
- * I.seeFile('codecept.js');
17
- * I.seeInThisFile('FileSystem');
18
- * I.dontSeeInThisFile("WebDriver");
19
- * ```
20
- *
21
- * ## Configuration
22
- *
23
- * Enable helper in config file:
24
- *
25
- * ```js
26
- * helpers: {
27
- * FileSystem: {},
28
- * }
29
- * ```
30
- *
31
- * ## Methods
32
- */
33
- class FileSystem extends Helper {
34
- constructor() {
35
- super();
36
- this.dir = global.codecept_dir;
37
- this.file = '';
38
- }
39
-
40
- _before() {
41
- this.debugSection('Dir', this.dir);
42
- }
43
-
44
- /**
45
- * Enters a directory In local filesystem.
46
- * Starts from a current directory
47
- * @param {string} openPath
48
- */
49
- amInPath(openPath) {
50
- this.dir = path.join(global.codecept_dir, openPath);
51
- this.debugSection('Dir', this.dir);
52
- }
53
-
54
- /**
55
- * Writes text to file
56
- * @param {string} name
57
- * @param {string} text
58
- */
59
- writeToFile(name, text) {
60
- fs.writeFileSync(path.join(this.dir, name), text);
61
- }
62
-
63
- /**
64
- * Checks that file exists
65
- * @param {string} name
66
- */
67
- seeFile(name) {
68
- this.file = path.join(this.dir, name);
69
- this.debugSection('File', this.file);
70
- assert.ok(fileExists(this.file), `File ${name} not found in ${this.dir}`);
71
- }
72
-
73
- /**
74
- * Waits for the file to be present in the current directory.
75
- *
76
- * ```js
77
- * I.handleDownloads('downloads/largeFilesName.txt');
78
- * I.click('Download large File');
79
- * I.amInPath('output/downloads');
80
- * I.waitForFile('largeFilesName.txt', 10); // wait 10 seconds for file
81
- * ```
82
- * @param {string} name
83
- * @param {number} [sec=1] seconds to wait
84
- */
85
- async waitForFile(name, sec = 1) {
86
- if (sec === 0) assert.fail('Use `seeFile` instead of waiting 0 seconds!');
87
- const waitTimeout = sec * 1000;
88
- this.file = path.join(this.dir, name);
89
- this.debugSection('File', this.file);
90
- return isFileExists(this.file, waitTimeout).catch(() => {
91
- throw new Error(`file (${name}) still not present in directory ${this.dir} after ${waitTimeout / 1000} sec`);
92
- });
93
- }
94
-
95
- /**
96
- * Checks that file with a name including given text exists in the current directory.
97
- *
98
- *```js
99
- * I.handleDownloads();
100
- * I.click('Download as PDF');
101
- * I.amInPath('output/downloads');
102
- * I.seeFileNameMatching('.pdf');
103
- * ```
104
- * @param {string} text
105
- */
106
- seeFileNameMatching(text) {
107
- assert.ok(
108
- this.grabFileNames().some(file => file.includes(text)),
109
- `File name which contains ${text} not found in ${this.dir}`,
110
- );
111
- }
112
-
113
- /**
114
- * Checks that file found by `seeFile` includes a text.
115
- * @param {string} text
116
- * @param {string} [encoding='utf8']
117
- */
118
- seeInThisFile(text, encoding = 'utf8') {
119
- const content = getFileContents(this.file, encoding);
120
- fileIncludes(this.file).assert(text, content);
121
- }
122
-
123
- /**
124
- * Checks that file found by `seeFile` doesn't include text.
125
- * @param {string} text
126
- * @param {string} [encoding='utf8']
127
- */
128
- dontSeeInThisFile(text, encoding = 'utf8') {
129
- const content = getFileContents(this.file, encoding);
130
- fileIncludes(this.file).negate(text, content);
131
- }
132
-
133
- /**
134
- * Checks that contents of file found by `seeFile` equal to text.
135
- * @param {string} text
136
- * @param {string} [encoding='utf8']
137
- */
138
- seeFileContentsEqual(text, encoding = 'utf8') {
139
- const content = getFileContents(this.file, encoding);
140
- fileEquals(this.file).assert(text, content);
141
- }
142
-
143
- /**
144
- * Checks that contents of the file found by `seeFile` equal to contents of the file at `pathToReferenceFile`.
145
- * @param {string} pathToReferenceFile
146
- * @param {string} [encoding='utf8']
147
- * @param {string} [encodingReference='utf8']
148
- */
149
- seeFileContentsEqualReferenceFile(pathToReferenceFile, encoding = 'utf8', encodingReference = '') {
150
- const content = getFileContents(this.file, encoding);
151
- assert.ok(fileExists(pathToReferenceFile), `Reference file ${pathToReferenceFile} not found.`);
152
- encodingReference = encodingReference || encoding;
153
- const expectedContent = getFileContents(pathToReferenceFile, encodingReference);
154
- fileEquals(this.file).assert(expectedContent, content);
155
- }
156
-
157
- /**
158
- * Checks that contents of file found by `seeFile` doesn't equal to text.
159
- * @param {string} text
160
- * @param {string} [encoding='utf8']
161
- */
162
- dontSeeFileContentsEqual(text, encoding = 'utf8') {
163
- const content = getFileContents(this.file, encoding);
164
- fileEquals(this.file).negate(text, content);
165
- }
166
-
167
- /**
168
- * Returns file names in current directory.
169
- *
170
- * ```js
171
- * I.handleDownloads();
172
- * I.click('Download Files');
173
- * I.amInPath('output/downloads');
174
- * const downloadedFileNames = I.grabFileNames();
175
- * ```
176
- */
177
- grabFileNames() {
178
- return fs.readdirSync(this.dir)
179
- .filter(item => !fs.lstatSync(path.join(this.dir, item)).isDirectory());
180
- }
181
- }
182
-
183
- module.exports = FileSystem;
184
-
185
- /**
186
- * @param {string} file
187
- * @param {string} [encoding='utf8']
188
- * @private
189
- * @returns {string}
190
- */
191
- function getFileContents(file, encoding = 'utf8') {
192
- if (!file) assert.fail('No files were opened, please use seeFile action');
193
- if (encoding === '') assert.fail('Encoding is an empty string, please set a valid encoding');
194
- return fs.readFileSync(file, encoding);
195
- }
196
-
197
- /**
198
- * @param {string} file
199
- * @param {number} timeout
200
- * @private
201
- * @returns {Promise<any>}
202
- */
203
- function isFileExists(file, timeout) {
204
- return new Promise(((resolve, reject) => {
205
- const timer = setTimeout(() => {
206
- watcher.close();
207
- reject(new Error('File did not exists and was not created during the timeout.'));
208
- }, timeout);
209
-
210
- const dir = path.dirname(file);
211
- const basename = path.basename(file);
212
- const watcher = fs.watch(dir, (eventType, filename) => {
213
- if (eventType === 'rename' && filename === basename) {
214
- clearTimeout(timer);
215
- watcher.close();
216
- resolve();
217
- }
218
- });
219
-
220
- fs.access(file, fs.constants.R_OK, (err) => {
221
- if (!err) {
222
- clearTimeout(timer);
223
- watcher.close();
224
- resolve();
225
- }
226
- });
227
- }));
228
- }