codeceptjs 3.5.12-beta.3 → 3.5.12-beta.5
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/docs/advanced.md +351 -0
- package/docs/ai.md +248 -0
- package/docs/api.md +323 -0
- package/docs/basics.md +979 -0
- package/docs/bdd.md +539 -0
- package/docs/best.md +237 -0
- package/docs/books.md +37 -0
- package/docs/bootstrap.md +135 -0
- package/docs/build/ApiDataFactory.js +410 -0
- package/docs/build/Appium.js +2027 -0
- package/docs/build/Expect.js +422 -0
- package/docs/build/FileSystem.js +228 -0
- package/docs/build/GraphQL.js +229 -0
- package/docs/build/GraphQLDataFactory.js +309 -0
- package/docs/build/JSONResponse.js +338 -0
- package/docs/build/Mochawesome.js +71 -0
- package/docs/build/Nightmare.js +2152 -0
- package/docs/build/OpenAI.js +126 -0
- package/docs/build/Playwright.js +5110 -0
- package/docs/build/Protractor.js +2706 -0
- package/docs/build/Puppeteer.js +3905 -0
- package/docs/build/REST.js +344 -0
- package/docs/build/TestCafe.js +2125 -0
- package/docs/build/WebDriver.js +4240 -0
- package/docs/changelog.md +2572 -0
- package/docs/commands.md +266 -0
- package/docs/community-helpers.md +58 -0
- package/docs/configuration.md +157 -0
- package/docs/continuous-integration.md +22 -0
- package/docs/custom-helpers.md +306 -0
- package/docs/data.md +379 -0
- package/docs/detox.md +235 -0
- package/docs/docker.md +136 -0
- package/docs/email.md +183 -0
- package/docs/examples.md +149 -0
- package/docs/helpers/ApiDataFactory.md +266 -0
- package/docs/helpers/Appium.md +1374 -0
- package/docs/helpers/Detox.md +586 -0
- package/docs/helpers/Expect.md +275 -0
- package/docs/helpers/FileSystem.md +152 -0
- package/docs/helpers/GraphQL.md +151 -0
- package/docs/helpers/GraphQLDataFactory.md +226 -0
- package/docs/helpers/JSONResponse.md +254 -0
- package/docs/helpers/Mochawesome.md +8 -0
- package/docs/helpers/MockRequest.md +377 -0
- package/docs/helpers/Nightmare.md +1305 -0
- package/docs/helpers/OpenAI.md +70 -0
- package/docs/helpers/Playwright.md +2759 -0
- package/docs/helpers/Polly.md +44 -0
- package/docs/helpers/Protractor.md +1769 -0
- package/docs/helpers/Puppeteer-firefox.md +86 -0
- package/docs/helpers/Puppeteer.md +2317 -0
- package/docs/helpers/REST.md +218 -0
- package/docs/helpers/TestCafe.md +1321 -0
- package/docs/helpers/WebDriver.md +2547 -0
- package/docs/hooks.md +340 -0
- package/docs/index.md +111 -0
- package/docs/installation.md +75 -0
- package/docs/internal-api.md +266 -0
- package/docs/locators.md +339 -0
- package/docs/mobile-react-native-locators.md +67 -0
- package/docs/mobile.md +338 -0
- package/docs/pageobjects.md +291 -0
- package/docs/parallel.md +400 -0
- package/docs/playwright.md +632 -0
- package/docs/plugins.md +1259 -0
- package/docs/puppeteer.md +316 -0
- package/docs/quickstart.md +162 -0
- package/docs/react.md +70 -0
- package/docs/reports.md +392 -0
- package/docs/secrets.md +36 -0
- package/docs/shadow.md +68 -0
- package/docs/shared/keys.mustache +31 -0
- package/docs/shared/react.mustache +1 -0
- package/docs/testcafe.md +174 -0
- package/docs/translation.md +247 -0
- package/docs/tutorial.md +271 -0
- package/docs/typescript.md +180 -0
- package/docs/ui.md +59 -0
- package/docs/videos.md +28 -0
- package/docs/visual.md +202 -0
- package/docs/vue.md +143 -0
- package/docs/webapi/amOnPage.mustache +11 -0
- package/docs/webapi/appendField.mustache +11 -0
- package/docs/webapi/attachFile.mustache +12 -0
- package/docs/webapi/blur.mustache +18 -0
- package/docs/webapi/checkOption.mustache +13 -0
- package/docs/webapi/clearCookie.mustache +9 -0
- package/docs/webapi/clearField.mustache +9 -0
- package/docs/webapi/click.mustache +25 -0
- package/docs/webapi/clickLink.mustache +8 -0
- package/docs/webapi/closeCurrentTab.mustache +7 -0
- package/docs/webapi/closeOtherTabs.mustache +8 -0
- package/docs/webapi/dontSee.mustache +11 -0
- package/docs/webapi/dontSeeCheckboxIsChecked.mustache +10 -0
- package/docs/webapi/dontSeeCookie.mustache +8 -0
- package/docs/webapi/dontSeeCurrentUrlEquals.mustache +10 -0
- package/docs/webapi/dontSeeElement.mustache +8 -0
- package/docs/webapi/dontSeeElementInDOM.mustache +8 -0
- package/docs/webapi/dontSeeInCurrentUrl.mustache +4 -0
- package/docs/webapi/dontSeeInField.mustache +11 -0
- package/docs/webapi/dontSeeInSource.mustache +8 -0
- package/docs/webapi/dontSeeInTitle.mustache +8 -0
- package/docs/webapi/doubleClick.mustache +13 -0
- package/docs/webapi/downloadFile.mustache +12 -0
- package/docs/webapi/dragAndDrop.mustache +9 -0
- package/docs/webapi/dragSlider.mustache +11 -0
- package/docs/webapi/executeAsyncScript.mustache +24 -0
- package/docs/webapi/executeScript.mustache +26 -0
- package/docs/webapi/fillField.mustache +16 -0
- package/docs/webapi/focus.mustache +13 -0
- package/docs/webapi/forceClick.mustache +28 -0
- package/docs/webapi/forceRightClick.mustache +18 -0
- package/docs/webapi/grabAllWindowHandles.mustache +7 -0
- package/docs/webapi/grabAttributeFrom.mustache +10 -0
- package/docs/webapi/grabAttributeFromAll.mustache +9 -0
- package/docs/webapi/grabBrowserLogs.mustache +9 -0
- package/docs/webapi/grabCookie.mustache +11 -0
- package/docs/webapi/grabCssPropertyFrom.mustache +11 -0
- package/docs/webapi/grabCssPropertyFromAll.mustache +10 -0
- package/docs/webapi/grabCurrentUrl.mustache +9 -0
- package/docs/webapi/grabCurrentWindowHandle.mustache +6 -0
- package/docs/webapi/grabDataFromPerformanceTiming.mustache +20 -0
- package/docs/webapi/grabElementBoundingRect.mustache +20 -0
- package/docs/webapi/grabGeoLocation.mustache +8 -0
- package/docs/webapi/grabHTMLFrom.mustache +10 -0
- package/docs/webapi/grabHTMLFromAll.mustache +9 -0
- package/docs/webapi/grabNumberOfOpenTabs.mustache +8 -0
- package/docs/webapi/grabNumberOfVisibleElements.mustache +9 -0
- package/docs/webapi/grabPageScrollPosition.mustache +8 -0
- package/docs/webapi/grabPopupText.mustache +5 -0
- package/docs/webapi/grabSource.mustache +8 -0
- package/docs/webapi/grabTextFrom.mustache +10 -0
- package/docs/webapi/grabTextFromAll.mustache +9 -0
- package/docs/webapi/grabTitle.mustache +8 -0
- package/docs/webapi/grabValueFrom.mustache +9 -0
- package/docs/webapi/grabValueFromAll.mustache +8 -0
- package/docs/webapi/grabWebElement.mustache +9 -0
- package/docs/webapi/grabWebElements.mustache +9 -0
- package/docs/webapi/moveCursorTo.mustache +12 -0
- package/docs/webapi/openNewTab.mustache +7 -0
- package/docs/webapi/pressKey.mustache +12 -0
- package/docs/webapi/pressKeyDown.mustache +12 -0
- package/docs/webapi/pressKeyUp.mustache +12 -0
- package/docs/webapi/pressKeyWithKeyNormalization.mustache +60 -0
- package/docs/webapi/refreshPage.mustache +6 -0
- package/docs/webapi/resizeWindow.mustache +6 -0
- package/docs/webapi/rightClick.mustache +14 -0
- package/docs/webapi/saveElementScreenshot.mustache +10 -0
- package/docs/webapi/saveScreenshot.mustache +12 -0
- package/docs/webapi/say.mustache +10 -0
- package/docs/webapi/scrollIntoView.mustache +11 -0
- package/docs/webapi/scrollPageToBottom.mustache +6 -0
- package/docs/webapi/scrollPageToTop.mustache +6 -0
- package/docs/webapi/scrollTo.mustache +12 -0
- package/docs/webapi/see.mustache +11 -0
- package/docs/webapi/seeAttributesOnElements.mustache +9 -0
- package/docs/webapi/seeCheckboxIsChecked.mustache +10 -0
- package/docs/webapi/seeCookie.mustache +8 -0
- package/docs/webapi/seeCssPropertiesOnElements.mustache +9 -0
- package/docs/webapi/seeCurrentUrlEquals.mustache +11 -0
- package/docs/webapi/seeElement.mustache +8 -0
- package/docs/webapi/seeElementInDOM.mustache +8 -0
- package/docs/webapi/seeInCurrentUrl.mustache +8 -0
- package/docs/webapi/seeInField.mustache +12 -0
- package/docs/webapi/seeInPopup.mustache +8 -0
- package/docs/webapi/seeInSource.mustache +7 -0
- package/docs/webapi/seeInTitle.mustache +8 -0
- package/docs/webapi/seeNumberOfElements.mustache +11 -0
- package/docs/webapi/seeNumberOfVisibleElements.mustache +10 -0
- package/docs/webapi/seeTextEquals.mustache +9 -0
- package/docs/webapi/seeTitleEquals.mustache +8 -0
- package/docs/webapi/selectOption.mustache +21 -0
- package/docs/webapi/setCookie.mustache +16 -0
- package/docs/webapi/setGeoLocation.mustache +12 -0
- package/docs/webapi/switchTo.mustache +9 -0
- package/docs/webapi/switchToNextTab.mustache +10 -0
- package/docs/webapi/switchToPreviousTab.mustache +10 -0
- package/docs/webapi/type.mustache +21 -0
- package/docs/webapi/uncheckOption.mustache +13 -0
- package/docs/webapi/wait.mustache +8 -0
- package/docs/webapi/waitForClickable.mustache +11 -0
- package/docs/webapi/waitForDetached.mustache +10 -0
- package/docs/webapi/waitForElement.mustache +11 -0
- package/docs/webapi/waitForEnabled.mustache +6 -0
- package/docs/webapi/waitForFunction.mustache +17 -0
- package/docs/webapi/waitForInvisible.mustache +10 -0
- package/docs/webapi/waitForNumberOfTabs.mustache +9 -0
- package/docs/webapi/waitForText.mustache +13 -0
- package/docs/webapi/waitForValue.mustache +10 -0
- package/docs/webapi/waitForVisible.mustache +10 -0
- package/docs/webapi/waitInUrl.mustache +9 -0
- package/docs/webapi/waitNumberOfVisibleElements.mustache +10 -0
- package/docs/webapi/waitToHide.mustache +10 -0
- package/docs/webapi/waitUrlEquals.mustache +10 -0
- package/docs/webdriver.md +701 -0
- package/docs/wiki/Books-&-Posts.md +27 -0
- package/docs/wiki/Community-Helpers-&-Plugins.md +53 -0
- package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +61 -0
- package/docs/wiki/Examples.md +145 -0
- package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +68 -0
- package/docs/wiki/Home.md +16 -0
- package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +83 -0
- package/docs/wiki/Release-Process.md +24 -0
- package/docs/wiki/Roadmap.md +23 -0
- package/docs/wiki/Tests.md +1393 -0
- package/docs/wiki/Upgrading-to-CodeceptJS-3.md +153 -0
- package/docs/wiki/Videos.md +19 -0
- package/package.json +2 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
permalink: /helpers/ApiDataFactory
|
|
3
|
+
editLink: false
|
|
4
|
+
sidebar: auto
|
|
5
|
+
title: ApiDataFactory
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
|
|
9
|
+
|
|
10
|
+
## ApiDataFactory
|
|
11
|
+
|
|
12
|
+
**Extends Helper**
|
|
13
|
+
|
|
14
|
+
Helper for managing remote data using REST API.
|
|
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 REST API 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
|
+
Most of web application have API, and it can be used to create and delete test records.
|
|
28
|
+
By combining REST API with Factories you can easily create records for tests:
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
I.have('user', { login: 'davert', email: 'davert@mail.com' });
|
|
32
|
+
let id = await I.have('post', { title: 'My first post'});
|
|
33
|
+
I.haveMultiple('comment', 3, {post_id: id});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
To make this work you need
|
|
37
|
+
|
|
38
|
+
1. REST API 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 Posts factories:
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
// tests/factories/posts.js
|
|
55
|
+
|
|
56
|
+
const { Factory } = require('rosie');
|
|
57
|
+
const { faker } = require('@faker-js/faker');
|
|
58
|
+
|
|
59
|
+
module.exports = new Factory()
|
|
60
|
+
// no need to set id, it will be set by REST API
|
|
61
|
+
.attr('author', () => faker.name.findName())
|
|
62
|
+
.attr('title', () => faker.lorem.sentence())
|
|
63
|
+
.attr('body', () => faker.lorem.paragraph());
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
For more options see [rosie documentation][1].
|
|
67
|
+
|
|
68
|
+
Then configure ApiDataHelper to match factories and REST API:
|
|
69
|
+
|
|
70
|
+
### Configuration
|
|
71
|
+
|
|
72
|
+
ApiDataFactory has following config options:
|
|
73
|
+
|
|
74
|
+
- `endpoint`: base URL for the API to send requests to.
|
|
75
|
+
- `cleanup` (default: true): should inserted records be deleted up after tests
|
|
76
|
+
- `factories`: list of defined factories
|
|
77
|
+
- `returnId` (default: false): return id instead of a complete response when creating items.
|
|
78
|
+
- `headers`: list of headers
|
|
79
|
+
- `REST`: configuration for REST requests
|
|
80
|
+
|
|
81
|
+
See the example:
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
ApiDataFactory: {
|
|
85
|
+
endpoint: "http://user.com/api",
|
|
86
|
+
cleanup: true,
|
|
87
|
+
headers: {
|
|
88
|
+
'Content-Type': 'application/json',
|
|
89
|
+
'Accept': 'application/json',
|
|
90
|
+
},
|
|
91
|
+
factories: {
|
|
92
|
+
post: {
|
|
93
|
+
uri: "/posts",
|
|
94
|
+
factory: "./factories/post",
|
|
95
|
+
},
|
|
96
|
+
comment: {
|
|
97
|
+
factory: "./factories/comment",
|
|
98
|
+
create: { post: "/comments/create" },
|
|
99
|
+
delete: { post: "/comments/delete/{id}" },
|
|
100
|
+
fetchId: (data) => data.result.id
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
It is required to set REST API `endpoint` which is the baseURL for all API requests.
|
|
107
|
+
Factory file is expected to be passed via `factory` option.
|
|
108
|
+
|
|
109
|
+
This Helper uses [REST][3] helper and accepts its configuration in "REST" section.
|
|
110
|
+
For instance, to set timeout you should add:
|
|
111
|
+
|
|
112
|
+
```js
|
|
113
|
+
"ApiDataFactory": {
|
|
114
|
+
"REST": {
|
|
115
|
+
"timeout": "100000",
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Requests
|
|
121
|
+
|
|
122
|
+
By default to create a record ApiDataFactory will use endpoint and plural factory name:
|
|
123
|
+
|
|
124
|
+
- create: `POST {endpoint}/{resource} data`
|
|
125
|
+
- delete: `DELETE {endpoint}/{resource}/id`
|
|
126
|
+
|
|
127
|
+
Example (`endpoint`: `http://app.com/api`):
|
|
128
|
+
|
|
129
|
+
- create: POST request to `http://app.com/api/users`
|
|
130
|
+
- delete: DELETE request to `http://app.com/api/users/1`
|
|
131
|
+
|
|
132
|
+
This behavior can be configured with following options:
|
|
133
|
+
|
|
134
|
+
- `uri`: set different resource uri. Example: `uri: account` => `http://app.com/api/account`.
|
|
135
|
+
- `create`: override create options. Expected format: `{ method: uri }`. Example: `{ "post": "/users/create" }`
|
|
136
|
+
- `delete`: override delete options. Expected format: `{ method: uri }`. Example: `{ "post": "/users/delete/{id}" }`
|
|
137
|
+
|
|
138
|
+
Requests can also be overridden with a function which returns [axois request config][4].
|
|
139
|
+
|
|
140
|
+
```js
|
|
141
|
+
create: (data) => ({ method: 'post', url: '/posts', data }),
|
|
142
|
+
delete: (id) => ({ method: 'delete', url: '/posts', data: { id } })
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Requests can be updated on the fly by using `onRequest` function. For instance, you can pass in current session from a cookie.
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
onRequest: async (request) => {
|
|
149
|
+
// using global codeceptjs instance
|
|
150
|
+
let cookie = await codeceptjs.container.helpers('WebDriver').grabCookie('session');
|
|
151
|
+
request.headers = { Cookie: `session=${cookie.value}` };
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Responses
|
|
156
|
+
|
|
157
|
+
By default `I.have()` returns a promise with a created data:
|
|
158
|
+
|
|
159
|
+
```js
|
|
160
|
+
let client = await I.have('client');
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Ids of created records are collected and used in the end of a test for the cleanup.
|
|
164
|
+
If you need to receive `id` instead of full response enable `returnId` in a helper config:
|
|
165
|
+
|
|
166
|
+
```js
|
|
167
|
+
// returnId: false
|
|
168
|
+
let clientId = await I.have('client');
|
|
169
|
+
// clientId == 1
|
|
170
|
+
|
|
171
|
+
// returnId: true
|
|
172
|
+
let clientId = await I.have('client');
|
|
173
|
+
// client == { name: 'John', email: 'john@snow.com' }
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
By default `id` property of response is taken. This behavior can be changed by setting `fetchId` function in a factory config.
|
|
177
|
+
|
|
178
|
+
```js
|
|
179
|
+
factories: {
|
|
180
|
+
post: {
|
|
181
|
+
uri: "/posts",
|
|
182
|
+
factory: "./factories/post",
|
|
183
|
+
fetchId: (data) => data.result.posts[0].id
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Methods
|
|
189
|
+
|
|
190
|
+
### Parameters
|
|
191
|
+
|
|
192
|
+
- `config`
|
|
193
|
+
|
|
194
|
+
### _requestCreate
|
|
195
|
+
|
|
196
|
+
Executes request to create a record in API.
|
|
197
|
+
Can be replaced from a in custom helper.
|
|
198
|
+
|
|
199
|
+
#### Parameters
|
|
200
|
+
|
|
201
|
+
- `factory` **any**
|
|
202
|
+
- `data` **any**
|
|
203
|
+
|
|
204
|
+
### _requestDelete
|
|
205
|
+
|
|
206
|
+
Executes request to delete a record in API
|
|
207
|
+
Can be replaced from a custom helper.
|
|
208
|
+
|
|
209
|
+
#### Parameters
|
|
210
|
+
|
|
211
|
+
- `factory` **any**
|
|
212
|
+
- `id` **any**
|
|
213
|
+
|
|
214
|
+
### have
|
|
215
|
+
|
|
216
|
+
Generates a new record using factory and saves API request to store it.
|
|
217
|
+
|
|
218
|
+
```js
|
|
219
|
+
// create a user
|
|
220
|
+
I.have('user');
|
|
221
|
+
// create user with defined email
|
|
222
|
+
// and receive it when inside async function
|
|
223
|
+
const user = await I.have('user', { email: 'user@user.com'});
|
|
224
|
+
// create a user with options that will not be included in the final request
|
|
225
|
+
I.have('user', { }, { age: 33, height: 55 })
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### Parameters
|
|
229
|
+
|
|
230
|
+
- `factory` **any** factory to use
|
|
231
|
+
- `params` **any?** predefined parameters
|
|
232
|
+
- `options` **any?** options for programmatically generate the attributes
|
|
233
|
+
|
|
234
|
+
Returns **[Promise][5]<any>**
|
|
235
|
+
|
|
236
|
+
### haveMultiple
|
|
237
|
+
|
|
238
|
+
Generates bunch of records and saves multiple API requests to store them.
|
|
239
|
+
|
|
240
|
+
```js
|
|
241
|
+
// create 3 posts
|
|
242
|
+
I.haveMultiple('post', 3);
|
|
243
|
+
|
|
244
|
+
// create 3 posts by one author
|
|
245
|
+
I.haveMultiple('post', 3, { author: 'davert' });
|
|
246
|
+
|
|
247
|
+
// create 3 posts by one author with options
|
|
248
|
+
I.haveMultiple('post', 3, { author: 'davert' }, { publish_date: '01.01.1997' });
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### Parameters
|
|
252
|
+
|
|
253
|
+
- `factory` **any**
|
|
254
|
+
- `times` **any**
|
|
255
|
+
- `params` **any?**
|
|
256
|
+
- `options` **any?**
|
|
257
|
+
|
|
258
|
+
[1]: https://github.com/rosiejs/rosie
|
|
259
|
+
|
|
260
|
+
[2]: https://www.npmjs.com/package/faker
|
|
261
|
+
|
|
262
|
+
[3]: http://codecept.io/helpers/REST/
|
|
263
|
+
|
|
264
|
+
[4]: https://github.com/axios/axios#request-config
|
|
265
|
+
|
|
266
|
+
[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
|