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.
- package/README.md +31 -30
- package/bin/codecept.js +1 -1
- package/lib/actor.js +6 -3
- package/lib/ai.js +180 -0
- package/lib/cli.js +13 -3
- package/lib/codecept.js +8 -0
- package/lib/colorUtils.js +10 -0
- package/lib/command/definitions.js +2 -7
- package/lib/command/dryRun.js +11 -2
- package/lib/command/generate.js +46 -3
- package/lib/command/info.js +24 -0
- package/lib/command/init.js +64 -6
- package/lib/command/interactive.js +15 -1
- package/lib/command/run-multiple/collection.js +17 -5
- package/lib/command/run-multiple.js +4 -2
- package/lib/command/run-workers.js +68 -5
- package/lib/command/run.js +7 -0
- package/lib/command/workers/runTests.js +39 -0
- package/lib/container.js +13 -3
- package/lib/data/context.js +14 -6
- package/lib/event.js +4 -0
- package/lib/helper/ApiDataFactory.js +2 -1
- package/lib/helper/Appium.js +116 -29
- package/lib/helper/Expect.js +422 -0
- package/lib/helper/FileSystem.js +1 -1
- package/lib/helper/GraphQL.js +25 -0
- package/lib/helper/JSONResponse.js +4 -4
- package/lib/helper/Nightmare.js +10 -5
- package/lib/helper/OpenAI.js +126 -0
- package/lib/helper/Playwright.js +1298 -229
- package/lib/helper/Protractor.js +12 -7
- package/lib/helper/Puppeteer.js +204 -64
- package/lib/helper/REST.js +15 -5
- package/lib/helper/TestCafe.js +45 -10
- package/lib/helper/WebDriver.js +252 -83
- package/lib/helper/errors/ElementNotFound.js +2 -1
- package/lib/helper/extras/PlaywrightReactVueLocator.js +38 -0
- package/lib/helper/scripts/blurElement.js +17 -0
- package/lib/helper/scripts/focusElement.js +17 -0
- package/lib/helper/scripts/highlightElement.js +20 -0
- package/lib/html.js +258 -0
- package/lib/interfaces/bdd.js +1 -1
- package/lib/interfaces/gherkin.js +37 -3
- package/lib/interfaces/scenarioConfig.js +1 -0
- package/lib/listener/retry.js +2 -1
- package/lib/locator.js +17 -4
- package/lib/mochaFactory.js +2 -1
- package/lib/output.js +1 -1
- package/lib/pause.js +78 -19
- package/lib/plugin/autoLogin.js +45 -10
- package/lib/plugin/debugErrors.js +67 -0
- package/lib/plugin/fakerTransform.js +4 -6
- package/lib/plugin/heal.js +209 -0
- package/lib/plugin/retryFailedStep.js +10 -1
- package/lib/plugin/retryTo.js +2 -4
- package/lib/plugin/screenshotOnFail.js +11 -2
- package/lib/plugin/selenoid.js +6 -1
- package/lib/plugin/standardActingHelpers.js +0 -2
- package/lib/plugin/stepByStepReport.js +2 -2
- package/lib/plugin/tryTo.js +5 -7
- package/lib/plugin/wdio.js +0 -1
- package/lib/recorder.js +22 -11
- package/lib/secret.js +5 -4
- package/lib/session.js +1 -1
- package/lib/step.js +36 -12
- package/lib/ui.js +5 -3
- package/lib/utils.js +22 -1
- package/lib/workers.js +83 -10
- package/package.json +117 -95
- package/translations/de-DE.js +5 -0
- package/translations/fr-FR.js +14 -1
- package/translations/it-IT.js +1 -0
- package/translations/ja-JP.js +14 -9
- package/translations/pl-PL.js +5 -0
- package/translations/pt-BR.js +1 -0
- package/translations/ru-RU.js +1 -0
- package/translations/zh-CN.js +5 -0
- package/translations/zh-TW.js +5 -0
- package/typings/index.d.ts +51 -15
- package/typings/promiseBasedTypes.d.ts +864 -802
- package/typings/types.d.ts +1339 -744
- package/CHANGELOG.md +0 -2427
- package/docs/advanced.md +0 -351
- package/docs/api.md +0 -323
- package/docs/basics.md +0 -980
- package/docs/bdd.md +0 -535
- package/docs/best.md +0 -237
- package/docs/books.md +0 -37
- package/docs/bootstrap.md +0 -135
- package/docs/build/ApiDataFactory.js +0 -409
- package/docs/build/Appium.js +0 -1938
- package/docs/build/FileSystem.js +0 -228
- package/docs/build/GraphQL.js +0 -204
- package/docs/build/GraphQLDataFactory.js +0 -309
- package/docs/build/JSONResponse.js +0 -338
- package/docs/build/Mochawesome.js +0 -71
- package/docs/build/Nightmare.js +0 -2145
- package/docs/build/Playwright.js +0 -3986
- package/docs/build/Polly.js +0 -42
- package/docs/build/Protractor.js +0 -2699
- package/docs/build/Puppeteer.js +0 -3710
- package/docs/build/REST.js +0 -334
- package/docs/build/SeleniumWebdriver.js +0 -76
- package/docs/build/TestCafe.js +0 -2057
- package/docs/build/WebDriver.js +0 -4017
- package/docs/changelog.md +0 -2436
- package/docs/commands.md +0 -254
- package/docs/community-helpers.md +0 -58
- package/docs/configuration.md +0 -157
- package/docs/continuous-integration.md +0 -22
- package/docs/custom-helpers.md +0 -306
- package/docs/data.md +0 -375
- package/docs/detox.md +0 -235
- package/docs/docker.md +0 -137
- package/docs/email.md +0 -183
- package/docs/examples.md +0 -149
- package/docs/helpers/ApiDataFactory.md +0 -266
- package/docs/helpers/Appium.md +0 -1312
- package/docs/helpers/Detox.md +0 -586
- package/docs/helpers/FileSystem.md +0 -152
- package/docs/helpers/GraphQL.md +0 -130
- package/docs/helpers/GraphQLDataFactory.md +0 -226
- package/docs/helpers/JSONResponse.md +0 -254
- package/docs/helpers/Mochawesome.md +0 -8
- package/docs/helpers/MockRequest.md +0 -377
- package/docs/helpers/Nightmare.md +0 -1256
- package/docs/helpers/Playwright.md +0 -2208
- package/docs/helpers/Polly.md +0 -44
- package/docs/helpers/Puppeteer-firefox.md +0 -86
- package/docs/helpers/Puppeteer.md +0 -2141
- package/docs/helpers/REST.md +0 -217
- package/docs/helpers/TestCafe.md +0 -1222
- package/docs/helpers/WebDriver.md +0 -2319
- package/docs/hooks.md +0 -340
- package/docs/index.md +0 -111
- package/docs/installation.md +0 -75
- package/docs/internal-api.md +0 -265
- package/docs/locators.md +0 -331
- package/docs/mobile-react-native-locators.md +0 -67
- package/docs/mobile.md +0 -297
- package/docs/nightmare.md +0 -223
- package/docs/pageobjects.md +0 -291
- package/docs/parallel.md +0 -232
- package/docs/playwright.md +0 -609
- package/docs/plugins.md +0 -1171
- package/docs/puppeteer.md +0 -316
- package/docs/quickstart.md +0 -163
- package/docs/react.md +0 -69
- package/docs/reports.md +0 -392
- package/docs/secrets.md +0 -30
- package/docs/shadow.md +0 -68
- package/docs/shared/keys.mustache +0 -31
- package/docs/shared/react.mustache +0 -1
- package/docs/testcafe.md +0 -174
- package/docs/translation.md +0 -247
- package/docs/tutorial.md +0 -271
- package/docs/typescript.md +0 -180
- package/docs/ui.md +0 -59
- package/docs/videos.md +0 -28
- package/docs/visual.md +0 -202
- package/docs/vue.md +0 -121
- package/docs/webapi/amOnPage.mustache +0 -11
- package/docs/webapi/appendField.mustache +0 -9
- package/docs/webapi/attachFile.mustache +0 -12
- package/docs/webapi/checkOption.mustache +0 -13
- package/docs/webapi/clearCookie.mustache +0 -10
- package/docs/webapi/clearField.mustache +0 -9
- package/docs/webapi/click.mustache +0 -25
- package/docs/webapi/clickLink.mustache +0 -8
- package/docs/webapi/closeCurrentTab.mustache +0 -7
- package/docs/webapi/closeOtherTabs.mustache +0 -8
- package/docs/webapi/dontSee.mustache +0 -11
- package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/dontSeeCookie.mustache +0 -8
- package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
- package/docs/webapi/dontSeeElement.mustache +0 -8
- package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
- package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
- package/docs/webapi/dontSeeInField.mustache +0 -11
- package/docs/webapi/dontSeeInSource.mustache +0 -8
- package/docs/webapi/dontSeeInTitle.mustache +0 -8
- package/docs/webapi/doubleClick.mustache +0 -13
- package/docs/webapi/downloadFile.mustache +0 -12
- package/docs/webapi/dragAndDrop.mustache +0 -9
- package/docs/webapi/dragSlider.mustache +0 -11
- package/docs/webapi/executeAsyncScript.mustache +0 -24
- package/docs/webapi/executeScript.mustache +0 -26
- package/docs/webapi/fillField.mustache +0 -16
- package/docs/webapi/forceClick.mustache +0 -28
- package/docs/webapi/forceRightClick.mustache +0 -18
- package/docs/webapi/grabAllWindowHandles.mustache +0 -7
- package/docs/webapi/grabAttributeFrom.mustache +0 -10
- package/docs/webapi/grabAttributeFromAll.mustache +0 -9
- package/docs/webapi/grabBrowserLogs.mustache +0 -9
- package/docs/webapi/grabCookie.mustache +0 -11
- package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
- package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
- package/docs/webapi/grabCurrentUrl.mustache +0 -9
- package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
- package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
- package/docs/webapi/grabElementBoundingRect.mustache +0 -20
- package/docs/webapi/grabGeoLocation.mustache +0 -8
- package/docs/webapi/grabHTMLFrom.mustache +0 -10
- package/docs/webapi/grabHTMLFromAll.mustache +0 -9
- package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
- package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
- package/docs/webapi/grabPageScrollPosition.mustache +0 -8
- package/docs/webapi/grabPopupText.mustache +0 -5
- package/docs/webapi/grabSource.mustache +0 -8
- package/docs/webapi/grabTextFrom.mustache +0 -10
- package/docs/webapi/grabTextFromAll.mustache +0 -9
- package/docs/webapi/grabTitle.mustache +0 -8
- package/docs/webapi/grabValueFrom.mustache +0 -9
- package/docs/webapi/grabValueFromAll.mustache +0 -8
- package/docs/webapi/moveCursorTo.mustache +0 -12
- package/docs/webapi/openNewTab.mustache +0 -7
- package/docs/webapi/pressKey.mustache +0 -12
- package/docs/webapi/pressKeyDown.mustache +0 -12
- package/docs/webapi/pressKeyUp.mustache +0 -12
- package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
- package/docs/webapi/refreshPage.mustache +0 -6
- package/docs/webapi/resizeWindow.mustache +0 -6
- package/docs/webapi/rightClick.mustache +0 -14
- package/docs/webapi/saveElementScreenshot.mustache +0 -10
- package/docs/webapi/saveScreenshot.mustache +0 -12
- package/docs/webapi/say.mustache +0 -10
- package/docs/webapi/scrollIntoView.mustache +0 -11
- package/docs/webapi/scrollPageToBottom.mustache +0 -6
- package/docs/webapi/scrollPageToTop.mustache +0 -6
- package/docs/webapi/scrollTo.mustache +0 -12
- package/docs/webapi/see.mustache +0 -11
- package/docs/webapi/seeAttributesOnElements.mustache +0 -9
- package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/seeCookie.mustache +0 -8
- package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
- package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
- package/docs/webapi/seeElement.mustache +0 -8
- package/docs/webapi/seeElementInDOM.mustache +0 -8
- package/docs/webapi/seeInCurrentUrl.mustache +0 -8
- package/docs/webapi/seeInField.mustache +0 -12
- package/docs/webapi/seeInPopup.mustache +0 -8
- package/docs/webapi/seeInSource.mustache +0 -7
- package/docs/webapi/seeInTitle.mustache +0 -8
- package/docs/webapi/seeNumberOfElements.mustache +0 -11
- package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/seeTextEquals.mustache +0 -9
- package/docs/webapi/seeTitleEquals.mustache +0 -8
- package/docs/webapi/selectOption.mustache +0 -21
- package/docs/webapi/setCookie.mustache +0 -16
- package/docs/webapi/setGeoLocation.mustache +0 -12
- package/docs/webapi/switchTo.mustache +0 -9
- package/docs/webapi/switchToNextTab.mustache +0 -10
- package/docs/webapi/switchToPreviousTab.mustache +0 -10
- package/docs/webapi/type.mustache +0 -18
- package/docs/webapi/uncheckOption.mustache +0 -13
- package/docs/webapi/wait.mustache +0 -8
- package/docs/webapi/waitForClickable.mustache +0 -11
- package/docs/webapi/waitForDetached.mustache +0 -10
- package/docs/webapi/waitForElement.mustache +0 -11
- package/docs/webapi/waitForEnabled.mustache +0 -6
- package/docs/webapi/waitForFunction.mustache +0 -17
- package/docs/webapi/waitForInvisible.mustache +0 -10
- package/docs/webapi/waitForText.mustache +0 -13
- package/docs/webapi/waitForValue.mustache +0 -10
- package/docs/webapi/waitForVisible.mustache +0 -10
- package/docs/webapi/waitInUrl.mustache +0 -9
- package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/waitToHide.mustache +0 -10
- package/docs/webapi/waitUrlEquals.mustache +0 -10
- package/docs/webdriver.md +0 -657
- package/docs/wiki/Books-&-Posts.md +0 -27
- package/docs/wiki/Community-Helpers-&-Plugins.md +0 -49
- package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -29
- package/docs/wiki/Examples.md +0 -139
- package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
- package/docs/wiki/Home.md +0 -16
- package/docs/wiki/Release-Process.md +0 -24
- package/docs/wiki/Roadmap.md +0 -23
- package/docs/wiki/Tests.md +0 -1393
- package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
- 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
|
package/docs/helpers/GraphQL.md
DELETED
|
@@ -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
|