cypress 5.1.0 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,80 @@
1
- /**
2
- * HTTP request/response types.
3
- */
1
+ // Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/methods/index.d.ts
2
+ type Method =
3
+ | 'ACL'
4
+ | 'BIND'
5
+ | 'CHECKOUT'
6
+ | 'CONNECT'
7
+ | 'COPY'
8
+ | 'DELETE'
9
+ | 'GET'
10
+ | 'HEAD'
11
+ | 'LINK'
12
+ | 'LOCK'
13
+ | 'M-SEARCH'
14
+ | 'MERGE'
15
+ | 'MKACTIVITY'
16
+ | 'MKCALENDAR'
17
+ | 'MKCOL'
18
+ | 'MOVE'
19
+ | 'NOTIFY'
20
+ | 'OPTIONS'
21
+ | 'PATCH'
22
+ | 'POST'
23
+ | 'PROPFIND'
24
+ | 'PROPPATCH'
25
+ | 'PURGE'
26
+ | 'PUT'
27
+ | 'REBIND'
28
+ | 'REPORT'
29
+ | 'SEARCH'
30
+ | 'SOURCE'
31
+ | 'SUBSCRIBE'
32
+ | 'TRACE'
33
+ | 'UNBIND'
34
+ | 'UNLINK'
35
+ | 'UNLOCK'
36
+ | 'UNSUBSCRIBE'
37
+ | 'acl'
38
+ | 'bind'
39
+ | 'checkout'
40
+ | 'connect'
41
+ | 'copy'
42
+ | 'delete'
43
+ | 'get'
44
+ | 'head'
45
+ | 'link'
46
+ | 'lock'
47
+ | 'm-search'
48
+ | 'merge'
49
+ | 'mkactivity'
50
+ | 'mkcalendar'
51
+ | 'mkcol'
52
+ | 'move'
53
+ | 'notify'
54
+ | 'options'
55
+ | 'patch'
56
+ | 'post'
57
+ | 'propfind'
58
+ | 'proppatch'
59
+ | 'purge'
60
+ | 'put'
61
+ | 'rebind'
62
+ | 'report'
63
+ | 'search'
64
+ | 'source'
65
+ | 'subscribe'
66
+ | 'trace'
67
+ | 'unbind'
68
+ | 'unlink'
69
+ | 'unlock'
70
+ | 'unsubscribe'
71
+
4
72
  export namespace CyHttpMessages {
5
73
  interface BaseMessage {
6
- // as much stuff from `incomingmessage` as makes sense to serialize and send
7
74
  body?: any
8
75
  headers: { [key: string]: string }
9
76
  url: string
10
- method?: string
77
+ method?: Method
11
78
  httpVersion?: string
12
79
  }
13
80
 
@@ -39,14 +106,39 @@ export namespace CyHttpMessages {
39
106
 
40
107
  export type IncomingRequest = BaseMessage & {
41
108
  responseTimeout?: number
109
+ /**
110
+ * Set if redirects should be followed when this request is made. By default, requests will
111
+ * not follow redirects before yielding the response (the 3xx redirect is yielded)
112
+ */
113
+ followRedirect?: boolean
42
114
  }
43
115
 
44
116
  export interface IncomingHttpRequest extends IncomingRequest {
117
+ /**
118
+ * Destroy the request and respond with a network error.
119
+ */
45
120
  destroy(): void
121
+ /**
122
+ * Control the response to this request.
123
+ * If a function is passed, the request will be sent outgoing, and the function will be called
124
+ * with the response from the upstream server.
125
+ * If a `StaticResponse` is passed, it will be used as the response, and no request will be made
126
+ * to the upstream server.
127
+ */
46
128
  reply(interceptor?: StaticResponse | HttpResponseInterceptor): void
129
+ /**
130
+ * Shortcut to reply to the request with a body and optional headers.
131
+ */
47
132
  reply(body: string | object, headers?: { [key: string]: string }): void
133
+ /**
134
+ * Shortcut to reply to the request with an HTTP status code and optional body and headers.
135
+ */
48
136
  reply(status: number, body?: string | object, headers?: { [key: string]: string }): void
49
- redirect(location: string, statusCode: number): void
137
+ /**
138
+ * Respond to this request with a redirect to a new `location`.
139
+ * @param statusCode HTTP status code to redirect with. Default: 302
140
+ */
141
+ redirect(location: string, statusCode?: number): void
50
142
  }
51
143
  }
52
144
 
@@ -59,9 +151,19 @@ export interface DictMatcher<T> {
59
151
  */
60
152
  export type GlobPattern = string
61
153
 
154
+ /**
155
+ * Interceptor for an HTTP request. If a Promise is returned, it will be awaited before passing the
156
+ * request to the next handler (if there is one), otherwise the request will be passed to the next
157
+ * handler synchronously.
158
+ */
62
159
  export type HttpRequestInterceptor = (req: CyHttpMessages.IncomingHttpRequest) => void | Promise<void>
63
160
 
64
- export type HttpResponseInterceptor = (res: CyHttpMessages.IncomingHttpResponse, send?: () => void) => void | Promise<void>
161
+ /**
162
+ * Interceptor for an HTTP response. If a Promise is returned, it will be awaited before passing the
163
+ * request to the next handler (if there is one), otherwise the request will be passed to the next
164
+ * handler synchronously.
165
+ */
166
+ export type HttpResponseInterceptor = (res: CyHttpMessages.IncomingHttpResponse) => void | Promise<void>
65
167
 
66
168
  /**
67
169
  * Matches a single number or any of an array of acceptable numbers.
@@ -125,23 +227,25 @@ export type RouteMatcherOptions = RouteMatcherOptionsGeneric<StringMatcher>
125
227
 
126
228
  export interface RouteMatcherOptionsGeneric<S> extends RouteMatcherCompatOptions {
127
229
  /**
128
- * Match HTTP basic authentication.
230
+ * Match against the username and password used in HTTP Basic authentication.
129
231
  */
130
232
  auth?: { username: S, password: S }
131
233
  /**
132
- * Match client request headers.
234
+ * Match against HTTP headers on the request.
133
235
  */
134
236
  headers?: DictMatcher<S>
135
237
  /**
136
- * Match based on requested hostname.
238
+ * Match against the requested HTTP hostname.
137
239
  */
138
240
  hostname?: S
139
241
  /**
140
- * Match requests served via HTTPS only.
242
+ * If 'true', only HTTPS requests will be matched.
243
+ * If 'false', only HTTP requests will be matched.
141
244
  */
142
245
  https?: boolean
143
246
  /**
144
- * @default 'GET'
247
+ * Match against the request's HTTP method.
248
+ * @default '*'
145
249
  */
146
250
  method?: S
147
251
  /**
@@ -153,7 +257,8 @@ export interface RouteMatcherOptionsGeneric<S> extends RouteMatcherCompatOptions
153
257
  */
154
258
  pathname?: S
155
259
  /**
156
- * Match based on requested port.
260
+ * Match based on requested port, or pass an array of ports
261
+ * to match against any in that array.
157
262
  */
158
263
  port?: NumberMatcher
159
264
  /**
@@ -161,7 +266,9 @@ export interface RouteMatcherOptionsGeneric<S> extends RouteMatcherCompatOptions
161
266
  */
162
267
  query?: DictMatcher<S>
163
268
  /**
164
- * Match based on full request URL.
269
+ * Match against the full request URL.
270
+ * If a string is passed, it will be used as a substring match,
271
+ * not an equality match.
165
272
  */
166
273
  url?: S
167
274
  }
@@ -173,29 +280,42 @@ export type RouteHandler = string | StaticResponse | RouteHandlerController | ob
173
280
  /**
174
281
  * Describes a response that will be sent back to the browser to fulfill the request.
175
282
  */
176
- export type StaticResponse = GenericStaticResponse<string, string | object>
283
+ export type StaticResponse = GenericStaticResponse<string, string | object> & {
284
+ /**
285
+ * Milliseconds to delay before the response is sent.
286
+ */
287
+ delayMs?: number
288
+ }
177
289
 
178
290
  export interface GenericStaticResponse<Fixture, Body> {
179
291
  /**
180
- * If set, serve a fixture as the response body.
292
+ * Serve a fixture as the response body.
181
293
  */
182
294
  fixture?: Fixture
183
295
  /**
184
- * If set, serve a static string/JSON object as the response body.
296
+ * Serve a static string/JSON object as the response body.
185
297
  */
186
298
  body?: Body
187
299
  /**
300
+ * HTTP headers to accompany the response.
188
301
  * @default {}
189
302
  */
190
303
  headers?: { [key: string]: string }
191
304
  /**
305
+ * The HTTP status code to send.
192
306
  * @default 200
193
307
  */
194
308
  statusCode?: number
195
309
  /**
196
- * If `forceNetworkError` is truthy, Cypress will destroy the connection to the browser and send no response. Useful for simulating a server that is not reachable. Must not be set in combination with other options.
310
+ * If 'forceNetworkError' is truthy, Cypress will destroy the browser connection
311
+ * and send no response. Useful for simulating a server that is not reachable.
312
+ * Must not be set in combination with other options.
197
313
  */
198
314
  forceNetworkError?: boolean
315
+ /**
316
+ * Kilobits per second to send 'body'.
317
+ */
318
+ throttleKbps?: number
199
319
  }
200
320
 
201
321
  /**
@@ -206,8 +326,38 @@ export type StringMatcher = GlobPattern | RegExp
206
326
  declare global {
207
327
  namespace Cypress {
208
328
  interface Chainable<Subject = any> {
329
+ /**
330
+ * Use `cy.route2()` to stub and intercept HTTP requests and responses.
331
+ *
332
+ * Note: this command is only available if you have set the `experimentalNetworkStubbing`
333
+ * configuration option to `true`.
334
+ *
335
+ * @see https://on.cypress.io/route2
336
+ * @example
337
+ * cy.route2('https://localhost:7777/users', [{id: 1, name: 'Pat'}])
338
+ * @example
339
+ * cy.route2('https://localhost:7777/protected-endpoint', (req) => {
340
+ * req.headers['authorization'] = 'basic fooabc123'
341
+ * })
342
+ * @example
343
+ * cy.route2('https://localhost:7777/some-response', (req) => {
344
+ * req.reply(res => {
345
+ * res.body = 'some new body'
346
+ * })
347
+ * })
348
+ */
209
349
  route2(url: RouteMatcher, response?: RouteHandler): Chainable<null>
210
- route2(method: string, url: RouteMatcher, response?: RouteHandler): Chainable<null>
350
+ /**
351
+ * Use `cy.route2()` to stub and intercept HTTP requests and responses.
352
+ *
353
+ * Note: this command is only available if you have set the `experimentalNetworkStubbing`
354
+ * configuration option to `true`.
355
+ *
356
+ * @see https://on.cypress.io/route2
357
+ * @example
358
+ * cy.route2('GET', 'http://foo.com/fruits', ['apple', 'banana', 'cherry'])
359
+ */
360
+ route2(method: Method, url: RouteMatcher, response?: RouteHandler): Chainable<null>
211
361
  }
212
362
  }
213
363
  }