codeceptjs 3.4.1 → 3.5.1-2.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 (281) hide show
  1. package/README.md +31 -30
  2. package/bin/codecept.js +1 -1
  3. package/lib/actor.js +6 -3
  4. package/lib/ai.js +180 -0
  5. package/lib/cli.js +13 -3
  6. package/lib/codecept.js +8 -0
  7. package/lib/colorUtils.js +10 -0
  8. package/lib/command/definitions.js +2 -7
  9. package/lib/command/dryRun.js +11 -2
  10. package/lib/command/generate.js +46 -3
  11. package/lib/command/info.js +24 -0
  12. package/lib/command/init.js +64 -6
  13. package/lib/command/interactive.js +15 -1
  14. package/lib/command/run-multiple/collection.js +17 -5
  15. package/lib/command/run-multiple.js +4 -2
  16. package/lib/command/run-workers.js +68 -5
  17. package/lib/command/run.js +7 -0
  18. package/lib/command/workers/runTests.js +39 -0
  19. package/lib/container.js +13 -3
  20. package/lib/data/context.js +14 -6
  21. package/lib/event.js +4 -0
  22. package/lib/helper/ApiDataFactory.js +2 -1
  23. package/lib/helper/Appium.js +116 -29
  24. package/lib/helper/Expect.js +422 -0
  25. package/lib/helper/FileSystem.js +1 -1
  26. package/lib/helper/GraphQL.js +25 -0
  27. package/lib/helper/JSONResponse.js +4 -4
  28. package/lib/helper/Nightmare.js +10 -5
  29. package/lib/helper/OpenAI.js +126 -0
  30. package/lib/helper/Playwright.js +1298 -229
  31. package/lib/helper/Protractor.js +12 -7
  32. package/lib/helper/Puppeteer.js +204 -64
  33. package/lib/helper/REST.js +15 -5
  34. package/lib/helper/TestCafe.js +45 -10
  35. package/lib/helper/WebDriver.js +252 -83
  36. package/lib/helper/errors/ElementNotFound.js +2 -1
  37. package/lib/helper/extras/PlaywrightReactVueLocator.js +38 -0
  38. package/lib/helper/scripts/blurElement.js +17 -0
  39. package/lib/helper/scripts/focusElement.js +17 -0
  40. package/lib/helper/scripts/highlightElement.js +20 -0
  41. package/lib/html.js +258 -0
  42. package/lib/interfaces/bdd.js +1 -1
  43. package/lib/interfaces/gherkin.js +37 -3
  44. package/lib/interfaces/scenarioConfig.js +1 -0
  45. package/lib/listener/retry.js +2 -1
  46. package/lib/locator.js +17 -4
  47. package/lib/mochaFactory.js +2 -1
  48. package/lib/output.js +1 -1
  49. package/lib/pause.js +78 -19
  50. package/lib/plugin/autoLogin.js +45 -10
  51. package/lib/plugin/debugErrors.js +67 -0
  52. package/lib/plugin/fakerTransform.js +4 -6
  53. package/lib/plugin/heal.js +209 -0
  54. package/lib/plugin/retryFailedStep.js +10 -1
  55. package/lib/plugin/retryTo.js +2 -4
  56. package/lib/plugin/screenshotOnFail.js +11 -2
  57. package/lib/plugin/selenoid.js +6 -1
  58. package/lib/plugin/standardActingHelpers.js +0 -2
  59. package/lib/plugin/stepByStepReport.js +2 -2
  60. package/lib/plugin/tryTo.js +5 -7
  61. package/lib/plugin/wdio.js +0 -1
  62. package/lib/recorder.js +22 -11
  63. package/lib/secret.js +5 -4
  64. package/lib/session.js +1 -1
  65. package/lib/step.js +36 -12
  66. package/lib/ui.js +5 -3
  67. package/lib/utils.js +22 -1
  68. package/lib/workers.js +83 -10
  69. package/package.json +117 -95
  70. package/translations/de-DE.js +5 -0
  71. package/translations/fr-FR.js +14 -1
  72. package/translations/it-IT.js +1 -0
  73. package/translations/ja-JP.js +14 -9
  74. package/translations/pl-PL.js +5 -0
  75. package/translations/pt-BR.js +1 -0
  76. package/translations/ru-RU.js +1 -0
  77. package/translations/zh-CN.js +5 -0
  78. package/translations/zh-TW.js +5 -0
  79. package/typings/index.d.ts +51 -15
  80. package/typings/promiseBasedTypes.d.ts +864 -802
  81. package/typings/types.d.ts +1339 -744
  82. package/CHANGELOG.md +0 -2427
  83. package/docs/advanced.md +0 -351
  84. package/docs/api.md +0 -323
  85. package/docs/basics.md +0 -980
  86. package/docs/bdd.md +0 -535
  87. package/docs/best.md +0 -237
  88. package/docs/books.md +0 -37
  89. package/docs/bootstrap.md +0 -135
  90. package/docs/build/ApiDataFactory.js +0 -409
  91. package/docs/build/Appium.js +0 -1938
  92. package/docs/build/FileSystem.js +0 -228
  93. package/docs/build/GraphQL.js +0 -204
  94. package/docs/build/GraphQLDataFactory.js +0 -309
  95. package/docs/build/JSONResponse.js +0 -338
  96. package/docs/build/Mochawesome.js +0 -71
  97. package/docs/build/Nightmare.js +0 -2145
  98. package/docs/build/Playwright.js +0 -3986
  99. package/docs/build/Polly.js +0 -42
  100. package/docs/build/Protractor.js +0 -2699
  101. package/docs/build/Puppeteer.js +0 -3710
  102. package/docs/build/REST.js +0 -334
  103. package/docs/build/SeleniumWebdriver.js +0 -76
  104. package/docs/build/TestCafe.js +0 -2057
  105. package/docs/build/WebDriver.js +0 -4017
  106. package/docs/changelog.md +0 -2436
  107. package/docs/commands.md +0 -254
  108. package/docs/community-helpers.md +0 -58
  109. package/docs/configuration.md +0 -157
  110. package/docs/continuous-integration.md +0 -22
  111. package/docs/custom-helpers.md +0 -306
  112. package/docs/data.md +0 -375
  113. package/docs/detox.md +0 -235
  114. package/docs/docker.md +0 -137
  115. package/docs/email.md +0 -183
  116. package/docs/examples.md +0 -149
  117. package/docs/helpers/ApiDataFactory.md +0 -266
  118. package/docs/helpers/Appium.md +0 -1312
  119. package/docs/helpers/Detox.md +0 -586
  120. package/docs/helpers/FileSystem.md +0 -152
  121. package/docs/helpers/GraphQL.md +0 -130
  122. package/docs/helpers/GraphQLDataFactory.md +0 -226
  123. package/docs/helpers/JSONResponse.md +0 -254
  124. package/docs/helpers/Mochawesome.md +0 -8
  125. package/docs/helpers/MockRequest.md +0 -377
  126. package/docs/helpers/Nightmare.md +0 -1256
  127. package/docs/helpers/Playwright.md +0 -2208
  128. package/docs/helpers/Polly.md +0 -44
  129. package/docs/helpers/Puppeteer-firefox.md +0 -86
  130. package/docs/helpers/Puppeteer.md +0 -2141
  131. package/docs/helpers/REST.md +0 -217
  132. package/docs/helpers/TestCafe.md +0 -1222
  133. package/docs/helpers/WebDriver.md +0 -2319
  134. package/docs/hooks.md +0 -340
  135. package/docs/index.md +0 -111
  136. package/docs/installation.md +0 -75
  137. package/docs/internal-api.md +0 -265
  138. package/docs/locators.md +0 -331
  139. package/docs/mobile-react-native-locators.md +0 -67
  140. package/docs/mobile.md +0 -297
  141. package/docs/nightmare.md +0 -223
  142. package/docs/pageobjects.md +0 -291
  143. package/docs/parallel.md +0 -232
  144. package/docs/playwright.md +0 -609
  145. package/docs/plugins.md +0 -1171
  146. package/docs/puppeteer.md +0 -316
  147. package/docs/quickstart.md +0 -163
  148. package/docs/react.md +0 -69
  149. package/docs/reports.md +0 -392
  150. package/docs/secrets.md +0 -30
  151. package/docs/shadow.md +0 -68
  152. package/docs/shared/keys.mustache +0 -31
  153. package/docs/shared/react.mustache +0 -1
  154. package/docs/testcafe.md +0 -174
  155. package/docs/translation.md +0 -247
  156. package/docs/tutorial.md +0 -271
  157. package/docs/typescript.md +0 -180
  158. package/docs/ui.md +0 -59
  159. package/docs/videos.md +0 -28
  160. package/docs/visual.md +0 -202
  161. package/docs/vue.md +0 -121
  162. package/docs/webapi/amOnPage.mustache +0 -11
  163. package/docs/webapi/appendField.mustache +0 -9
  164. package/docs/webapi/attachFile.mustache +0 -12
  165. package/docs/webapi/checkOption.mustache +0 -13
  166. package/docs/webapi/clearCookie.mustache +0 -10
  167. package/docs/webapi/clearField.mustache +0 -9
  168. package/docs/webapi/click.mustache +0 -25
  169. package/docs/webapi/clickLink.mustache +0 -8
  170. package/docs/webapi/closeCurrentTab.mustache +0 -7
  171. package/docs/webapi/closeOtherTabs.mustache +0 -8
  172. package/docs/webapi/dontSee.mustache +0 -11
  173. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  174. package/docs/webapi/dontSeeCookie.mustache +0 -8
  175. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  176. package/docs/webapi/dontSeeElement.mustache +0 -8
  177. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  178. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  179. package/docs/webapi/dontSeeInField.mustache +0 -11
  180. package/docs/webapi/dontSeeInSource.mustache +0 -8
  181. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  182. package/docs/webapi/doubleClick.mustache +0 -13
  183. package/docs/webapi/downloadFile.mustache +0 -12
  184. package/docs/webapi/dragAndDrop.mustache +0 -9
  185. package/docs/webapi/dragSlider.mustache +0 -11
  186. package/docs/webapi/executeAsyncScript.mustache +0 -24
  187. package/docs/webapi/executeScript.mustache +0 -26
  188. package/docs/webapi/fillField.mustache +0 -16
  189. package/docs/webapi/forceClick.mustache +0 -28
  190. package/docs/webapi/forceRightClick.mustache +0 -18
  191. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  192. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  193. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  194. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  195. package/docs/webapi/grabCookie.mustache +0 -11
  196. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  197. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  198. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  199. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  200. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  201. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  202. package/docs/webapi/grabGeoLocation.mustache +0 -8
  203. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  204. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  205. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  206. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  207. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  208. package/docs/webapi/grabPopupText.mustache +0 -5
  209. package/docs/webapi/grabSource.mustache +0 -8
  210. package/docs/webapi/grabTextFrom.mustache +0 -10
  211. package/docs/webapi/grabTextFromAll.mustache +0 -9
  212. package/docs/webapi/grabTitle.mustache +0 -8
  213. package/docs/webapi/grabValueFrom.mustache +0 -9
  214. package/docs/webapi/grabValueFromAll.mustache +0 -8
  215. package/docs/webapi/moveCursorTo.mustache +0 -12
  216. package/docs/webapi/openNewTab.mustache +0 -7
  217. package/docs/webapi/pressKey.mustache +0 -12
  218. package/docs/webapi/pressKeyDown.mustache +0 -12
  219. package/docs/webapi/pressKeyUp.mustache +0 -12
  220. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  221. package/docs/webapi/refreshPage.mustache +0 -6
  222. package/docs/webapi/resizeWindow.mustache +0 -6
  223. package/docs/webapi/rightClick.mustache +0 -14
  224. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  225. package/docs/webapi/saveScreenshot.mustache +0 -12
  226. package/docs/webapi/say.mustache +0 -10
  227. package/docs/webapi/scrollIntoView.mustache +0 -11
  228. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  229. package/docs/webapi/scrollPageToTop.mustache +0 -6
  230. package/docs/webapi/scrollTo.mustache +0 -12
  231. package/docs/webapi/see.mustache +0 -11
  232. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  233. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  234. package/docs/webapi/seeCookie.mustache +0 -8
  235. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  236. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  237. package/docs/webapi/seeElement.mustache +0 -8
  238. package/docs/webapi/seeElementInDOM.mustache +0 -8
  239. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  240. package/docs/webapi/seeInField.mustache +0 -12
  241. package/docs/webapi/seeInPopup.mustache +0 -8
  242. package/docs/webapi/seeInSource.mustache +0 -7
  243. package/docs/webapi/seeInTitle.mustache +0 -8
  244. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  245. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  246. package/docs/webapi/seeTextEquals.mustache +0 -9
  247. package/docs/webapi/seeTitleEquals.mustache +0 -8
  248. package/docs/webapi/selectOption.mustache +0 -21
  249. package/docs/webapi/setCookie.mustache +0 -16
  250. package/docs/webapi/setGeoLocation.mustache +0 -12
  251. package/docs/webapi/switchTo.mustache +0 -9
  252. package/docs/webapi/switchToNextTab.mustache +0 -10
  253. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  254. package/docs/webapi/type.mustache +0 -18
  255. package/docs/webapi/uncheckOption.mustache +0 -13
  256. package/docs/webapi/wait.mustache +0 -8
  257. package/docs/webapi/waitForClickable.mustache +0 -11
  258. package/docs/webapi/waitForDetached.mustache +0 -10
  259. package/docs/webapi/waitForElement.mustache +0 -11
  260. package/docs/webapi/waitForEnabled.mustache +0 -6
  261. package/docs/webapi/waitForFunction.mustache +0 -17
  262. package/docs/webapi/waitForInvisible.mustache +0 -10
  263. package/docs/webapi/waitForText.mustache +0 -13
  264. package/docs/webapi/waitForValue.mustache +0 -10
  265. package/docs/webapi/waitForVisible.mustache +0 -10
  266. package/docs/webapi/waitInUrl.mustache +0 -9
  267. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  268. package/docs/webapi/waitToHide.mustache +0 -10
  269. package/docs/webapi/waitUrlEquals.mustache +0 -10
  270. package/docs/webdriver.md +0 -657
  271. package/docs/wiki/Books-&-Posts.md +0 -27
  272. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -49
  273. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -29
  274. package/docs/wiki/Examples.md +0 -139
  275. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  276. package/docs/wiki/Home.md +0 -16
  277. package/docs/wiki/Release-Process.md +0 -24
  278. package/docs/wiki/Roadmap.md +0 -23
  279. package/docs/wiki/Tests.md +0 -1393
  280. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  281. package/docs/wiki/Videos.md +0 -19
@@ -1,152 +0,0 @@
1
- ---
2
- permalink: /helpers/FileSystem
3
- editLink: false
4
- sidebar: auto
5
- title: FileSystem
6
- ---
7
-
8
- <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
-
10
- ## FileSystem
11
-
12
- **Extends Helper**
13
-
14
- Helper for testing filesystem.
15
- Can be easily used to check file structures:
16
-
17
- ```js
18
- I.amInPath('test');
19
- I.seeFile('codecept.js');
20
- I.seeInThisFile('FileSystem');
21
- I.dontSeeInThisFile("WebDriver");
22
- ```
23
-
24
- ## Configuration
25
-
26
- Enable helper in config file:
27
-
28
- ```js
29
- helpers: {
30
- FileSystem: {},
31
- }
32
- ```
33
-
34
- ## Methods
35
-
36
- ### amInPath
37
-
38
- Enters a directory In local filesystem.
39
- Starts from a current directory
40
-
41
- #### Parameters
42
-
43
- - `openPath` **[string][1]**
44
-
45
- ### dontSeeFileContentsEqual
46
-
47
- Checks that contents of file found by `seeFile` doesn't equal to text.
48
-
49
- #### Parameters
50
-
51
- - `text` **[string][1]**
52
- - `encoding` **[string][1]**
53
-
54
- ### dontSeeInThisFile
55
-
56
- Checks that file found by `seeFile` doesn't include text.
57
-
58
- #### Parameters
59
-
60
- - `text` **[string][1]**
61
- - `encoding` **[string][1]**
62
-
63
- ### grabFileNames
64
-
65
- Returns file names in current directory.
66
-
67
- ```js
68
- I.handleDownloads();
69
- I.click('Download Files');
70
- I.amInPath('output/downloads');
71
- const downloadedFileNames = I.grabFileNames();
72
- ```
73
-
74
- ### seeFile
75
-
76
- Checks that file exists
77
-
78
- #### Parameters
79
-
80
- - `name` **[string][1]**
81
-
82
- ### seeFileContentsEqual
83
-
84
- Checks that contents of file found by `seeFile` equal to text.
85
-
86
- #### Parameters
87
-
88
- - `text` **[string][1]**
89
- - `encoding` **[string][1]**
90
-
91
- ### seeFileContentsEqualReferenceFile
92
-
93
- Checks that contents of the file found by `seeFile` equal to contents of the file at `pathToReferenceFile`.
94
-
95
- #### Parameters
96
-
97
- - `pathToReferenceFile` **[string][1]**
98
- - `encoding` **[string][1]**
99
- - `encodingReference` **[string][1]**
100
-
101
- ### seeFileNameMatching
102
-
103
- Checks that file with a name including given text exists in the current directory.
104
-
105
- ```js
106
- I.handleDownloads();
107
- I.click('Download as PDF');
108
- I.amInPath('output/downloads');
109
- I.seeFileNameMatching('.pdf');
110
- ```
111
-
112
- #### Parameters
113
-
114
- - `text` **[string][1]**
115
-
116
- ### seeInThisFile
117
-
118
- Checks that file found by `seeFile` includes a text.
119
-
120
- #### Parameters
121
-
122
- - `text` **[string][1]**
123
- - `encoding` **[string][1]**
124
-
125
- ### waitForFile
126
-
127
- Waits for the file to be present in the current directory.
128
-
129
- ```js
130
- I.handleDownloads('downloads/largeFilesName.txt');
131
- I.click('Download large File');
132
- I.amInPath('output/downloads');
133
- I.waitForFile('largeFilesName.txt', 10); // wait 10 seconds for file
134
- ```
135
-
136
- #### Parameters
137
-
138
- - `name` **[string][1]**
139
- - `sec` **[number][2]** seconds to wait
140
-
141
- ### writeToFile
142
-
143
- Writes test to file
144
-
145
- #### Parameters
146
-
147
- - `name` **[string][1]**
148
- - `text` **[string][1]**
149
-
150
- [1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
151
-
152
- [2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
@@ -1,130 +0,0 @@
1
- ---
2
- permalink: /helpers/GraphQL
3
- editLink: false
4
- sidebar: auto
5
- title: GraphQL
6
- ---
7
-
8
- <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
-
10
- ## GraphQL
11
-
12
- **Extends Helper**
13
-
14
- GraphQL helper allows to send additional requests to a GraphQl endpoint during acceptance tests.
15
- [Axios][1] library is used to perform requests.
16
-
17
- ## Configuration
18
-
19
- - endpoint: GraphQL base URL
20
- - timeout: timeout for requests in milliseconds. 10000ms by default
21
- - defaultHeaders: a list of default headers
22
- - onRequest: a async function which can update request object.
23
-
24
- ## Example
25
-
26
- ```js
27
- GraphQL: {
28
- endpoint: 'http://site.com/graphql/',
29
- onRequest: (request) => {
30
- request.headers.auth = '123';
31
- }
32
- }
33
- ```
34
-
35
- ## Access From Helpers
36
-
37
- Send GraphQL requests by accessing `_executeQuery` method:
38
-
39
- ```js
40
- this.helpers['GraphQL']._executeQuery({
41
- url,
42
- data,
43
- });
44
- ```
45
-
46
- ## Methods
47
-
48
- ### Parameters
49
-
50
- - `config`
51
-
52
- ### _executeQuery
53
-
54
- Executes query via axios call
55
-
56
- #### Parameters
57
-
58
- - `request` **[object][2]**
59
-
60
- ### _prepareGraphQLRequest
61
-
62
- Prepares request for axios call
63
-
64
- #### Parameters
65
-
66
- - `operation` **[object][2]**
67
- - `headers` **[object][2]**
68
-
69
- Returns **[object][2]** graphQLRequest
70
-
71
- ### sendMutation
72
-
73
- Send query to GraphQL endpoint over http
74
-
75
- ```js
76
- I.sendMutation(`
77
- mutation createUser($user: UserInput!) {
78
- createUser(user: $user) {
79
- id
80
- name
81
- email
82
- }
83
- }
84
- `,
85
- { user: {
86
- name: 'John Doe',
87
- email: 'john@xmail.com'
88
- }
89
- },
90
- });
91
- ```
92
-
93
- #### Parameters
94
-
95
- - `mutation` **[String][3]**
96
- - `variables` **[object][2]?** that may go along with the mutation
97
- - `options` **[object][2]?** are additional query options
98
- - `headers` **[object][2]?**
99
-
100
- Returns **any** Promise<any>
101
-
102
- ### sendQuery
103
-
104
- Send query to GraphQL endpoint over http.
105
- Returns a response as a promise.
106
-
107
- ```js
108
- const response = await I.sendQuery('{ users { name email }}');
109
- // with variables
110
- const response = await I.sendQuery(
111
- 'query getUser($id: ID) { user(id: $id) { name email }}',
112
- { id: 1 },
113
- )
114
- const user = response.data.data;
115
- ```
116
-
117
- #### Parameters
118
-
119
- - `query` **[String][3]**
120
- - `variables` **[object][2]?** that may go along with the query
121
- - `options` **[object][2]?** are additional query options
122
- - `headers` **[object][2]?**
123
-
124
- Returns **any** Promise<any>
125
-
126
- [1]: https://github.com/axios/axios
127
-
128
- [2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
129
-
130
- [3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
@@ -1,226 +0,0 @@
1
- ---
2
- permalink: /helpers/GraphQLDataFactory
3
- editLink: false
4
- sidebar: auto
5
- title: GraphQLDataFactory
6
- ---
7
-
8
- <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
-
10
- ## GraphQLDataFactory
11
-
12
- **Extends Helper**
13
-
14
- Helper for managing remote data using GraphQL queries.
15
- Uses data generators like [rosie][1] or factory girl to create new record.
16
-
17
- By defining a factory you set the rules of how data is generated.
18
- This data will be saved on server via GraphQL queries and deleted in the end of a test.
19
-
20
- ## Use Case
21
-
22
- Acceptance tests interact with a websites using UI and real browser.
23
- There is no way to create data for a specific test other than from user interface.
24
- That makes tests slow and fragile. Instead of testing a single feature you need to follow all creation/removal process.
25
-
26
- This helper solves this problem.
27
- If a web application has GraphQL support, it can be used to create and delete test records.
28
- By combining GraphQL with Factories you can easily create records for tests:
29
-
30
- ```js
31
- I.mutateData('createUser', { name: 'davert', email: 'davert@mail.com' });
32
- let user = await I.mutateData('createUser', { name: 'davert'});
33
- I.mutateMultiple('createPost', 3, {post_id: user.id});
34
- ```
35
-
36
- To make this work you need
37
-
38
- 1. GraphQL endpoint which allows to perform create / delete requests and
39
- 2. define data generation rules
40
-
41
- ### Setup
42
-
43
- Install [Rosie][1] and [Faker][2] libraries.
44
-
45
- ```sh
46
- npm i rosie @faker-js/faker --save-dev
47
- ```
48
-
49
- Create a factory file for a resource.
50
-
51
- See the example for Users factories:
52
-
53
- ```js
54
- // tests/factories/users.js
55
-
56
- const { Factory } = require('rosie').Factory;
57
- const { faker } = require('@faker-js/faker');
58
-
59
- // Used with a constructor function passed to Factory, so that the final build
60
- // object matches the necessary pattern to be sent as the variables object.
61
- module.exports = new Factory((buildObj) => ({
62
- input: { ...buildObj },
63
- }))
64
- // 'attr'-id can be left out depending on the GraphQl resolvers
65
- .attr('name', () => faker.name.findName())
66
- .attr('email', () => faker.interact.email())
67
- ```
68
-
69
- For more options see [rosie documentation][1].
70
-
71
- Then configure GraphQLDataHelper to match factories and GraphQL schema:
72
-
73
- ### Configuration
74
-
75
- GraphQLDataFactory has following config options:
76
-
77
- - `endpoint`: URL for the GraphQL server.
78
- - `cleanup` (default: true): should inserted records be deleted up after tests
79
- - `factories`: list of defined factories
80
- - `headers`: list of headers
81
- - `GraphQL`: configuration for GraphQL requests.
82
-
83
- See the example:
84
-
85
- ```js
86
- GraphQLDataFactory: {
87
- endpoint: "http://user.com/graphql",
88
- cleanup: true,
89
- headers: {
90
- 'Content-Type': 'application/json',
91
- 'Accept': 'application/json',
92
- },
93
- factories: {
94
- createUser: {
95
- query: 'mutation createUser($input: UserInput!) { createUser(input: $input) { id name }}',
96
- factory: './factories/users',
97
- revert: (data) => ({
98
- query: 'mutation deleteUser($id: ID!) { deleteUser(id: $id) }',
99
- variables: { id : data.id},
100
- }),
101
- },
102
- }
103
- }
104
- ```
105
-
106
- It is required to set GraphQL `endpoint` which is the URL to which all the queries go to.
107
- Factory file is expected to be passed via `factory` option.
108
-
109
- This Helper uses [GraphQL][3] helper and accepts its configuration in "GraphQL" section.
110
- For instance, to set timeout you should add:
111
-
112
- ```js
113
- "GraphQLDataFactory": {
114
- "GraphQL": {
115
- "timeout": "100000",
116
- }
117
- }
118
- ```
119
-
120
- ### Factory
121
-
122
- Factory contains operations -
123
-
124
- - `operation`: The operation/mutation that needs to be performed for creating a record in the backend.
125
-
126
- Each operation must have the following:
127
-
128
- - `query`: The mutation(query) string. It is expected to use variables to send data with the query.
129
- - `factory`: The path to factory file. The object built by the factory in this file will be passed
130
- as the 'variables' object to go along with the mutation.
131
- - `revert`: A function called with the data returned when an item is created. The object returned by
132
- this function is will be used to later delete the items created. So, make sure RELEVANT DATA IS RETURNED
133
- when a record is created by a mutation.
134
-
135
- ### Requests
136
-
137
- Requests can be updated on the fly by using `onRequest` function. For instance, you can pass in current session from a cookie.
138
-
139
- ```js
140
- onRequest: async (request) => {
141
- // using global codeceptjs instance
142
- let cookie = await codeceptjs.container.helpers('WebDriver').grabCookie('session');
143
- request.headers = { Cookie: `session=${cookie.value}` };
144
- }
145
- ```
146
-
147
- ### Responses
148
-
149
- By default `I.mutateData()` returns a promise with created data as specified in operation query string:
150
-
151
- ```js
152
- let client = await I.mutateData('createClient');
153
- ```
154
-
155
- Data of created records are collected and used in the end of a test for the cleanup.
156
-
157
- ## Methods
158
-
159
- ### Parameters
160
-
161
- - `config`
162
-
163
- ### _requestCreate
164
-
165
- Executes request to create a record to the GraphQL endpoint.
166
- Can be replaced from a custom helper.
167
-
168
- #### Parameters
169
-
170
- - `operation` **[string][4]**
171
- - `variables` **any** to be sent along with the query
172
-
173
- ### _requestDelete
174
-
175
- Executes request to delete a record to the GraphQL endpoint.
176
- Can be replaced from a custom helper.
177
-
178
- #### Parameters
179
-
180
- - `operation` **[string][4]**
181
- - `data` **any** of the record to be deleted.
182
-
183
- ### mutateData
184
-
185
- Generates a new record using factory, sends a GraphQL mutation to store it.
186
-
187
- ```js
188
- // create a user
189
- I.mutateData('createUser');
190
- // create user with defined email
191
- // and receive it when inside async function
192
- const user = await I.mutateData('createUser', { email: 'user@user.com'});
193
- ```
194
-
195
- #### Parameters
196
-
197
- - `operation` **[string][4]** to be performed
198
- - `params` **any** predefined parameters
199
-
200
- ### mutateMultiple
201
-
202
- Generates bunch of records and sends multiple GraphQL mutation requests to store them.
203
-
204
- ```js
205
- // create 3 users
206
- I.mutateMultiple('createUser', 3);
207
-
208
- // create 3 users of same age
209
- I.mutateMultiple('createUser', 3, { age: 25 });
210
- ```
211
-
212
- #### Parameters
213
-
214
- - `operation` **[string][4]**
215
- - `times` **[number][5]**
216
- - `params` **any**
217
-
218
- [1]: https://github.com/rosiejs/rosie
219
-
220
- [2]: https://www.npmjs.com/package/faker
221
-
222
- [3]: http://codecept.io/helpers/GraphQL/
223
-
224
- [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
225
-
226
- [5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number