codeceptjs 3.5.12-beta.5 → 3.5.12-beta.6

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 (214) hide show
  1. package/lib/helper/Playwright.js +41 -22
  2. package/lib/helper/Puppeteer.js +23 -6
  3. package/lib/helper/WebDriver.js +23 -4
  4. package/lib/helper/errors/ElementAssertion.js +38 -0
  5. package/lib/locator.js +4 -13
  6. package/package.json +8 -10
  7. package/docs/advanced.md +0 -351
  8. package/docs/ai.md +0 -248
  9. package/docs/api.md +0 -323
  10. package/docs/basics.md +0 -979
  11. package/docs/bdd.md +0 -539
  12. package/docs/best.md +0 -237
  13. package/docs/books.md +0 -37
  14. package/docs/bootstrap.md +0 -135
  15. package/docs/build/ApiDataFactory.js +0 -410
  16. package/docs/build/Appium.js +0 -2027
  17. package/docs/build/Expect.js +0 -422
  18. package/docs/build/FileSystem.js +0 -228
  19. package/docs/build/GraphQL.js +0 -229
  20. package/docs/build/GraphQLDataFactory.js +0 -309
  21. package/docs/build/JSONResponse.js +0 -338
  22. package/docs/build/Mochawesome.js +0 -71
  23. package/docs/build/Nightmare.js +0 -2152
  24. package/docs/build/OpenAI.js +0 -126
  25. package/docs/build/Playwright.js +0 -5110
  26. package/docs/build/Protractor.js +0 -2706
  27. package/docs/build/Puppeteer.js +0 -3905
  28. package/docs/build/REST.js +0 -344
  29. package/docs/build/TestCafe.js +0 -2125
  30. package/docs/build/WebDriver.js +0 -4240
  31. package/docs/changelog.md +0 -2572
  32. package/docs/commands.md +0 -266
  33. package/docs/community-helpers.md +0 -58
  34. package/docs/configuration.md +0 -157
  35. package/docs/continuous-integration.md +0 -22
  36. package/docs/custom-helpers.md +0 -306
  37. package/docs/data.md +0 -379
  38. package/docs/detox.md +0 -235
  39. package/docs/docker.md +0 -136
  40. package/docs/email.md +0 -183
  41. package/docs/examples.md +0 -149
  42. package/docs/helpers/ApiDataFactory.md +0 -266
  43. package/docs/helpers/Appium.md +0 -1374
  44. package/docs/helpers/Detox.md +0 -586
  45. package/docs/helpers/Expect.md +0 -275
  46. package/docs/helpers/FileSystem.md +0 -152
  47. package/docs/helpers/GraphQL.md +0 -151
  48. package/docs/helpers/GraphQLDataFactory.md +0 -226
  49. package/docs/helpers/JSONResponse.md +0 -254
  50. package/docs/helpers/Mochawesome.md +0 -8
  51. package/docs/helpers/MockRequest.md +0 -377
  52. package/docs/helpers/Nightmare.md +0 -1305
  53. package/docs/helpers/OpenAI.md +0 -70
  54. package/docs/helpers/Playwright.md +0 -2759
  55. package/docs/helpers/Polly.md +0 -44
  56. package/docs/helpers/Protractor.md +0 -1769
  57. package/docs/helpers/Puppeteer-firefox.md +0 -86
  58. package/docs/helpers/Puppeteer.md +0 -2317
  59. package/docs/helpers/REST.md +0 -218
  60. package/docs/helpers/TestCafe.md +0 -1321
  61. package/docs/helpers/WebDriver.md +0 -2547
  62. package/docs/hooks.md +0 -340
  63. package/docs/index.md +0 -111
  64. package/docs/installation.md +0 -75
  65. package/docs/internal-api.md +0 -266
  66. package/docs/locators.md +0 -339
  67. package/docs/mobile-react-native-locators.md +0 -67
  68. package/docs/mobile.md +0 -338
  69. package/docs/pageobjects.md +0 -291
  70. package/docs/parallel.md +0 -400
  71. package/docs/playwright.md +0 -632
  72. package/docs/plugins.md +0 -1259
  73. package/docs/puppeteer.md +0 -316
  74. package/docs/quickstart.md +0 -162
  75. package/docs/react.md +0 -70
  76. package/docs/reports.md +0 -392
  77. package/docs/secrets.md +0 -36
  78. package/docs/shadow.md +0 -68
  79. package/docs/shared/keys.mustache +0 -31
  80. package/docs/shared/react.mustache +0 -1
  81. package/docs/testcafe.md +0 -174
  82. package/docs/translation.md +0 -247
  83. package/docs/tutorial.md +0 -271
  84. package/docs/typescript.md +0 -180
  85. package/docs/ui.md +0 -59
  86. package/docs/videos.md +0 -28
  87. package/docs/visual.md +0 -202
  88. package/docs/vue.md +0 -143
  89. package/docs/webapi/amOnPage.mustache +0 -11
  90. package/docs/webapi/appendField.mustache +0 -11
  91. package/docs/webapi/attachFile.mustache +0 -12
  92. package/docs/webapi/blur.mustache +0 -18
  93. package/docs/webapi/checkOption.mustache +0 -13
  94. package/docs/webapi/clearCookie.mustache +0 -9
  95. package/docs/webapi/clearField.mustache +0 -9
  96. package/docs/webapi/click.mustache +0 -25
  97. package/docs/webapi/clickLink.mustache +0 -8
  98. package/docs/webapi/closeCurrentTab.mustache +0 -7
  99. package/docs/webapi/closeOtherTabs.mustache +0 -8
  100. package/docs/webapi/dontSee.mustache +0 -11
  101. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  102. package/docs/webapi/dontSeeCookie.mustache +0 -8
  103. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  104. package/docs/webapi/dontSeeElement.mustache +0 -8
  105. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  106. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  107. package/docs/webapi/dontSeeInField.mustache +0 -11
  108. package/docs/webapi/dontSeeInSource.mustache +0 -8
  109. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  110. package/docs/webapi/doubleClick.mustache +0 -13
  111. package/docs/webapi/downloadFile.mustache +0 -12
  112. package/docs/webapi/dragAndDrop.mustache +0 -9
  113. package/docs/webapi/dragSlider.mustache +0 -11
  114. package/docs/webapi/executeAsyncScript.mustache +0 -24
  115. package/docs/webapi/executeScript.mustache +0 -26
  116. package/docs/webapi/fillField.mustache +0 -16
  117. package/docs/webapi/focus.mustache +0 -13
  118. package/docs/webapi/forceClick.mustache +0 -28
  119. package/docs/webapi/forceRightClick.mustache +0 -18
  120. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  121. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  122. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  123. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  124. package/docs/webapi/grabCookie.mustache +0 -11
  125. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  126. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  127. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  128. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  129. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  130. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  131. package/docs/webapi/grabGeoLocation.mustache +0 -8
  132. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  133. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  134. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  135. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  136. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  137. package/docs/webapi/grabPopupText.mustache +0 -5
  138. package/docs/webapi/grabSource.mustache +0 -8
  139. package/docs/webapi/grabTextFrom.mustache +0 -10
  140. package/docs/webapi/grabTextFromAll.mustache +0 -9
  141. package/docs/webapi/grabTitle.mustache +0 -8
  142. package/docs/webapi/grabValueFrom.mustache +0 -9
  143. package/docs/webapi/grabValueFromAll.mustache +0 -8
  144. package/docs/webapi/grabWebElement.mustache +0 -9
  145. package/docs/webapi/grabWebElements.mustache +0 -9
  146. package/docs/webapi/moveCursorTo.mustache +0 -12
  147. package/docs/webapi/openNewTab.mustache +0 -7
  148. package/docs/webapi/pressKey.mustache +0 -12
  149. package/docs/webapi/pressKeyDown.mustache +0 -12
  150. package/docs/webapi/pressKeyUp.mustache +0 -12
  151. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  152. package/docs/webapi/refreshPage.mustache +0 -6
  153. package/docs/webapi/resizeWindow.mustache +0 -6
  154. package/docs/webapi/rightClick.mustache +0 -14
  155. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  156. package/docs/webapi/saveScreenshot.mustache +0 -12
  157. package/docs/webapi/say.mustache +0 -10
  158. package/docs/webapi/scrollIntoView.mustache +0 -11
  159. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  160. package/docs/webapi/scrollPageToTop.mustache +0 -6
  161. package/docs/webapi/scrollTo.mustache +0 -12
  162. package/docs/webapi/see.mustache +0 -11
  163. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  164. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  165. package/docs/webapi/seeCookie.mustache +0 -8
  166. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  167. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  168. package/docs/webapi/seeElement.mustache +0 -8
  169. package/docs/webapi/seeElementInDOM.mustache +0 -8
  170. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  171. package/docs/webapi/seeInField.mustache +0 -12
  172. package/docs/webapi/seeInPopup.mustache +0 -8
  173. package/docs/webapi/seeInSource.mustache +0 -7
  174. package/docs/webapi/seeInTitle.mustache +0 -8
  175. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  176. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  177. package/docs/webapi/seeTextEquals.mustache +0 -9
  178. package/docs/webapi/seeTitleEquals.mustache +0 -8
  179. package/docs/webapi/selectOption.mustache +0 -21
  180. package/docs/webapi/setCookie.mustache +0 -16
  181. package/docs/webapi/setGeoLocation.mustache +0 -12
  182. package/docs/webapi/switchTo.mustache +0 -9
  183. package/docs/webapi/switchToNextTab.mustache +0 -10
  184. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  185. package/docs/webapi/type.mustache +0 -21
  186. package/docs/webapi/uncheckOption.mustache +0 -13
  187. package/docs/webapi/wait.mustache +0 -8
  188. package/docs/webapi/waitForClickable.mustache +0 -11
  189. package/docs/webapi/waitForDetached.mustache +0 -10
  190. package/docs/webapi/waitForElement.mustache +0 -11
  191. package/docs/webapi/waitForEnabled.mustache +0 -6
  192. package/docs/webapi/waitForFunction.mustache +0 -17
  193. package/docs/webapi/waitForInvisible.mustache +0 -10
  194. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  195. package/docs/webapi/waitForText.mustache +0 -13
  196. package/docs/webapi/waitForValue.mustache +0 -10
  197. package/docs/webapi/waitForVisible.mustache +0 -10
  198. package/docs/webapi/waitInUrl.mustache +0 -9
  199. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  200. package/docs/webapi/waitToHide.mustache +0 -10
  201. package/docs/webapi/waitUrlEquals.mustache +0 -10
  202. package/docs/webdriver.md +0 -701
  203. package/docs/wiki/Books-&-Posts.md +0 -27
  204. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -53
  205. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -61
  206. package/docs/wiki/Examples.md +0 -145
  207. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  208. package/docs/wiki/Home.md +0 -16
  209. package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +0 -83
  210. package/docs/wiki/Release-Process.md +0 -24
  211. package/docs/wiki/Roadmap.md +0 -23
  212. package/docs/wiki/Tests.md +0 -1393
  213. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  214. package/docs/wiki/Videos.md +0 -19
package/docs/api.md DELETED
@@ -1,323 +0,0 @@
1
- ---
2
- permalink: /api
3
- title: API Testing
4
- ---
5
-
6
- ## API Testing
7
-
8
- CodeceptJS provides a way to write tests in declarative manner for REST and GraphQL APIs.
9
-
10
- Take a look:
11
-
12
- ```js
13
- I.sendGetRequest('/users/1');
14
- // returns { "user": { "name": "jon" }, "projects": [] }
15
- I.seeResponseCodeIsSuccessful();
16
- I.seeResponseContainsKeys(['user', 'projects']);
17
- I.seeResponseContainsJson({ user: { name: 'jon' } });
18
- I.seeResponseMatchesJsonSchema($ => {
19
- return $.object(
20
- user: $.object({
21
- name: $.string(),
22
- }),
23
- projects: $.array()
24
- )
25
- });
26
- ```
27
- In this code we checked API request for:
28
-
29
- * status code
30
- * data inclusion
31
- * data structure
32
-
33
- These are the things you should generally test your APIs for.
34
-
35
- > 🤓 It is recommended to check only invariable parts of responses. Check for required fields and only values you control. For instance, it is not recommended to check id fields, date fields, as they can be frequently changed.
36
-
37
- ## Installation
38
-
39
- Install CodeceptJS if it is not installed yet.
40
-
41
- ```
42
- npm i codeceptjs --save-dev
43
- ```
44
-
45
- Initialize CodeceptJS and select REST or GraphQL helper when asked for a helper:
46
-
47
- ```
48
- npx codeceptjs init
49
- ```
50
-
51
- ## Configuration
52
-
53
- Ensure that inside `codecept.conf.js` in helpers section `REST` or `GraphQL` helpers are enabled.
54
-
55
- * If you use `REST` helper add `JSONResponse` helper below with no extra config:
56
-
57
- ```js
58
- // inside codecept.conf.js
59
- // ...
60
- helpers: {
61
- REST: {
62
- endpoint: 'http://localhost:3000/api'
63
- },
64
- // .. add JSONResponse helper here
65
- JSONResponse: {}
66
- }
67
- ```
68
- * If you use `GraphQL` helper add `JSONResponse` helper, configuring it to use GraphQL for requests:
69
-
70
- ```js
71
- helpers: {
72
- GraphQL: {
73
- endpoint: 'http://localhost:3000/graphql'
74
- },
75
- // .. add JSONResponse helper here
76
- JSONResponse: {
77
- requestHelper: 'GraphQL',
78
- }
79
- }
80
- ```
81
-
82
- Originally, REST and GraphQL helpers were not designed for API testing.
83
- They were used to perform API requests for browser tests. As so, they lack assertion methods to API responses.
84
-
85
- [`JSONResponse`](/helpers/JSONResponse/) helper adds response assertions.
86
-
87
- > 💡 In CodeceptJS assertions start with `see` prefix. Learn more about assertions by [opening reference for JSONResponse](/helpers/JSONResponse/) helper.
88
-
89
- Generate TypeScript definitions to get auto-completions for JSONResponse:
90
-
91
- ```
92
- npx codeceptjs def
93
- ```
94
-
95
- After helpers were configured and typings were generated, you can start writing first API test. By default, CodeceptJS saves tests in `tests` directory and uses `*_test.js` suffix. The `init` command created the first test for you to start.
96
-
97
- > Check [API Examples](https://github.com/codeceptjs/api-examples) to see tests implementations.
98
-
99
- ## Requests
100
-
101
- [REST](/helpers/REST/) or [GraphQL](/helpers/GraphQL/) helpers implement methods for making API requests.
102
- Both helpers send requests via HTTP protocol from CodeceptJS process.
103
- For most cases, you will need to have authentication. It can be passed via headers, which can be added to helper's configuration in `codecept.conf.js`.
104
-
105
- ```js
106
- helpers: {
107
- REST: {
108
- defaultHeaders: {
109
- // use Bearer Authorization
110
- 'Authorization': 'Bearer 11111',
111
- 'Content-Type': 'application/json',
112
- 'Accept': 'application/json',
113
- },
114
- }
115
- }
116
- ```
117
-
118
- Or you can use the browser cookies if you are running browser session.
119
- In this case use `setSharedCookies()` from `@codeceptjs/configure` package:
120
-
121
- ```js
122
- const { setSharedCookies } = require('@codeceptjs/configure');
123
-
124
- // add this before exports.config
125
- setSharedCookies();
126
-
127
- exports.config = {
128
- // ...
129
- helpers: {
130
- // also works with Playwright or Puppeteer
131
- WebDriver: {
132
- //...
133
- },
134
-
135
- REST: {
136
- // ...
137
- }
138
- }
139
- }
140
- ```
141
-
142
- ### REST
143
-
144
- REST helper can send GET/POST/PATCH/etc requests to REST API endpoint:
145
-
146
- * [`I.sendGetRequest()`](/helpers/REST#sendGetRequest)
147
- * [`I.sendPostRequest()`](/helpers/REST#sendPostRequest)
148
- * [`I.sendPutRequest()`](/helpers/REST#sendPutRequest)
149
- * [`I.sendPatchRequest()`](/helpers/REST#sendPatchRequest)
150
- * [`I.sendDeleteRequest()`](/helpers/REST#sendDeleteRequest)
151
- * ...
152
-
153
- Authentication headers can be set in [helper's config](https://codecept.io/helpers/REST/#configuration) or per test with headers or special methods like `I.amBearerAuthenticated`.
154
-
155
- Example:
156
-
157
- ```js
158
- Feature('Users endpoint')
159
-
160
- Scenario('create user', ({ I }) => {
161
- // this way we pass Bearer token
162
- I.amBearerAuthenticated(secret('token-is-here'));
163
- // for custom authorization with headers use
164
- // I.haveRequestHeaders method
165
-
166
- // here we send a POST request
167
- const response = await I.sendPostRequest('/users', {
168
- name: 'joe',
169
- email: 'joe@mail.com'
170
- });
171
- // usually we won't need direct access to response object for API testing
172
- // but you can obtain it from request
173
-
174
- // check the last request was successful
175
- // this method introduced by JSONResponse helper
176
- I.seeResponseCodeIsSuccessful();
177
- })
178
- ```
179
-
180
- ### GraphQL
181
-
182
- GraphQL have request format different then in REST API, but the response format is the same.
183
- It's plain old JSON. This why `JSONResponse` helper works for both API types.
184
- Configure authorization headers in `codecept.conf.js` and make your first query:
185
-
186
- ```js
187
- Feature('Users endpoint')
188
-
189
- Scenario('get user by query', ({ I }) => {
190
- // make GraphQL query or mutation
191
- const resp = await I.sendQuery('{ user(id: 0) { id name email }}');
192
- I.seeResponseCodeIsSuccessful();
193
-
194
- // GraphQL always returns key data as part of response
195
- I.seeResponseContainsKeys(['data']);
196
-
197
- // check data for partial inclusion
198
- I.seeResponseContainsJson({
199
- data: {
200
- user: {
201
- name: 'john doe',
202
- email: 'johnd@mutex.com',
203
- },
204
- },
205
- });
206
- });
207
- ```
208
-
209
- GraphQL helper has two methods available:
210
-
211
- * [`I.sendQuery()`](/helpers/GraphQL#sendQuery)
212
- * [`I.sendMutation()`](/helpers/GraphQL#sendMutation)
213
-
214
- ## Assertions
215
-
216
- `JSONResponse` provides set of assertions for responses in JSON format. These assertions were designed to check only invariable parts of responses. So instead of checking that response equals to the one provided, we will check for data inclusion and structure matching.
217
-
218
- For most of cases, you won't need to perform assertions by accessing `response` object directly. All assretions are performed under hood inside `JSONResponse` module. It is recommended to keep it that way, to keep tests readable and make test log to contain all assertions.
219
-
220
- ```js
221
- Scenario('I make API call', ({ I }) => {
222
- // request was made by REST
223
- // or by GraphQL helper
224
-
225
- // check that response code is 2xx
226
- I.seeResponseCodeIsSuccessful();
227
-
228
- // check that response contains keys
229
- I.seeResponseContainsKeys(['data', 'pages', 'meta']);
230
- });
231
- ```
232
-
233
- ### Response Status Codes
234
-
235
- [Response status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) can be checked to be equal to some value or to be in a specific range.
236
- To check that response code is `200` call `I.seeResponseCodeIs`:
237
-
238
- ```js
239
- I.seeResponseCodeIs(200);
240
- ```
241
- But because other response codes in 2xx range are also valid responses, you can use `seeResponseCodeIsSuccessful()` which will match 200 (OK), 201 (Created), 206 (Partial Content) and others. Methods to check 3xx, 4xx, 5xx response statuses also available.
242
-
243
- ```js
244
- // matches 200, 201, 202, ... 206
245
- I.seeResponseCodeIsSuccessful();
246
-
247
- // matches 300...308
248
- I.seeResponseCodeIsRedirection();
249
-
250
- // matches 400..451
251
- I.seeResponseCodeIsClientError();
252
-
253
- // matches 500-511
254
- I.seeResponseCodeIsServerError();
255
- ```
256
-
257
- ### Structure
258
-
259
- The most basic thing to check in response is existence of keys in JSON object. Use [`I.seeResponseContainsKeys()`](/helpers/JSONResponse#seeResponseContainsKeys) method for it:
260
-
261
- ```js
262
- // response is { "name": "joe", "email": "joe@joe.com" }
263
- I.seeResponseContainsKeys(['name', 'email']);
264
- ```
265
-
266
- > ℹ️ If response is an array, it will check that every element in array have provided keys
267
-
268
- However, this is a very naive approach. It won't work for arrays or nested objects.
269
- To check complex JSON structures `JSONResponse` helper uses [`joi`](https://joi.dev) library.
270
- It has rich API to validate JSON by the schema defined using JavaScript.
271
-
272
- ```js
273
- // require joi library,
274
- // it is installed with CodeceptJS
275
- const Joi = require('joi');
276
-
277
- // create schema definition using Joi API
278
- const schema = Joi.object().keys({
279
- email: Joi.string().email().required(),
280
- phone: Joi.string().regex(/^\d{3}-\d{3}-\d{4}$/).required(),
281
- birthday: Joi.date().max('1-1-2004').iso()
282
- });
283
-
284
- // check that response matches that schema
285
- I.seeResponseMatchesJsonSchema(schema);
286
- ```
287
-
288
- ### Data Inclusion
289
-
290
- To check that response contains expected data use `I.seeResponseContainsJson` method.
291
- It will check the response data for partial match.
292
-
293
- ```js
294
- I.seeResponseContainsJson({
295
- user: {
296
- email: 'user@user.com'
297
- }
298
- })
299
- ```
300
-
301
- > ℹ️ If response is an array, it will check that at least one element in array matches JSON
302
-
303
- To perform arbitrary assertions on a response object use `seeResponseValidByCallback`.
304
- It allows you to do any kind of assertions by using `expect` from [`chai`](https://www.chaijs.com) library.
305
-
306
- ```js
307
- I.seeResponseValidByCallback(({ data, status, expect }) => {
308
- // we receive data and expect to combine them for good assertion
309
- expect(data.users.length).to.be.gte(10);
310
- })
311
- ```
312
-
313
- ## Extending JSONResponse
314
-
315
- To add more assertions it is recommended to create a custom helper.
316
- Inside it you can get access to latest JSON response:
317
-
318
- ```js
319
- // inside a custom helper
320
- makeSomeCustomAssertion() {
321
- const response = this.helpers.JSONResponse.response;
322
- }
323
- ```