cypress 9.1.1 → 9.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -37,7 +37,7 @@ const xvfb = require('../exec/xvfb');
37
37
 
38
38
  const state = require('./state');
39
39
 
40
- const VERIFY_TEST_RUNNER_TIMEOUT_MS = 30000;
40
+ const VERIFY_TEST_RUNNER_TIMEOUT_MS = process.env.CYPRESS_VERIFY_TIMEOUT || 30000;
41
41
 
42
42
  const checkExecutable = binaryDir => {
43
43
  const executable = state.getPathToExecutable(binaryDir);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cypress",
3
- "version": "9.1.1",
3
+ "version": "9.2.0",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "postinstall": "node index.js --exec install",
@@ -7,13 +7,38 @@ declare namespace Cypress {
7
7
  type HttpMethod = string
8
8
  type RequestBody = string | object
9
9
  type ViewportOrientation = 'portrait' | 'landscape'
10
- type PrevSubject = 'optional' | 'element' | 'document' | 'window'
10
+ type PrevSubject = keyof PrevSubjectMap
11
11
  type TestingType = 'e2e' | 'component'
12
12
  type PluginConfig = (on: PluginEvents, config: PluginConfigOptions) => void | ConfigOptions | Promise<ConfigOptions>
13
13
 
14
+ interface PrevSubjectMap<O = unknown> {
15
+ optional: O
16
+ element: JQuery
17
+ document: Document
18
+ window: Window
19
+ }
20
+
14
21
  interface CommandOptions {
15
22
  prevSubject: boolean | PrevSubject | PrevSubject[]
16
23
  }
24
+ interface CommandFn<T extends keyof ChainableMethods> {
25
+ (this: Mocha.Context, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void
26
+ }
27
+ interface CommandFnWithSubject<T extends keyof ChainableMethods, S> {
28
+ (this: Mocha.Context, prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void
29
+ }
30
+ interface CommandOriginalFn<T extends keyof ChainableMethods> extends CallableFunction {
31
+ (...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]>
32
+ }
33
+ interface CommandOriginalFnWithSubject<T extends keyof ChainableMethods, S> extends CallableFunction {
34
+ (prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]>
35
+ }
36
+ interface CommandFnWithOriginalFn<T extends keyof Chainable> {
37
+ (this: Mocha.Context, originalFn: CommandOriginalFn<T>, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void
38
+ }
39
+ interface CommandFnWithOriginalFnAndSubject<T extends keyof Chainable, S> {
40
+ (this: Mocha.Context, originalFn: CommandOriginalFnWithSubject<T, S>, prevSubject: S, ...args: Parameters<ChainableMethods[T]>): ReturnType<ChainableMethods[T]> | void
41
+ }
17
42
  interface ObjectLike {
18
43
  [key: string]: any
19
44
  }
@@ -294,6 +319,11 @@ declare namespace Cypress {
294
319
  */
295
320
  LocalStorage: LocalStorage
296
321
 
322
+ /**
323
+ * Internal class for session management.
324
+ */
325
+ session: Session
326
+
297
327
  /**
298
328
  * Current testing type, determined by the Test Runner chosen to run.
299
329
  */
@@ -328,7 +358,7 @@ declare namespace Cypress {
328
358
  // 60000
329
359
  ```
330
360
  */
331
- config<K extends keyof ConfigOptions>(key: K): ResolvedConfigOptions[K]
361
+ config<K extends keyof Config>(key: K): Config[K]
332
362
  /**
333
363
  * Sets one configuration value.
334
364
  * @see https://on.cypress.io/config
@@ -337,7 +367,7 @@ declare namespace Cypress {
337
367
  Cypress.config('viewportWidth', 800)
338
368
  ```
339
369
  */
340
- config<K extends keyof ConfigOptions>(key: K, value: ResolvedConfigOptions[K]): void
370
+ config<K extends keyof TestConfigOverrides>(key: K, value: TestConfigOverrides[K]): void
341
371
  /**
342
372
  * Sets multiple configuration values at once.
343
373
  * @see https://on.cypress.io/config
@@ -420,9 +450,16 @@ declare namespace Cypress {
420
450
  * @see https://on.cypress.io/api/commands
421
451
  */
422
452
  Commands: {
423
- add<T extends keyof Chainable>(name: T, fn: Chainable[T]): void
424
- add<T extends keyof Chainable>(name: T, options: CommandOptions, fn: Chainable[T]): void
425
- overwrite<T extends keyof Chainable>(name: T, fn: Chainable[T]): void
453
+ add<T extends keyof Chainable>(name: T, fn: CommandFn<T>): void
454
+ add<T extends keyof Chainable>(name: T, options: CommandOptions & {prevSubject: false}, fn: CommandFn<T>): void
455
+ add<T extends keyof Chainable, S extends PrevSubject>(
456
+ name: T, options: CommandOptions & { prevSubject: true | S | ['optional'] }, fn: CommandFnWithSubject<T, PrevSubjectMap[S]>,
457
+ ): void
458
+ add<T extends keyof Chainable, S extends PrevSubject>(
459
+ name: T, options: CommandOptions & { prevSubject: S[] }, fn: CommandFnWithSubject<T, PrevSubjectMap<void>[S]>,
460
+ ): void
461
+ overwrite<T extends keyof Chainable>(name: T, fn: CommandFnWithOriginalFn<T>): void
462
+ overwrite<T extends keyof Chainable, S extends PrevSubject>(name: T, fn: CommandFnWithOriginalFnAndSubject<T, PrevSubjectMap[S]>): void
426
463
  }
427
464
 
428
465
  /**
@@ -2209,12 +2246,9 @@ declare namespace Cypress {
2209
2246
  * @see https://on.cypress.io/writefile
2210
2247
  ```
2211
2248
  cy.writeFile('path/to/message.txt', 'Hello World')
2212
- .then((text) => {
2213
- expect(text).to.equal('Hello World') // true
2214
- })
2215
2249
  ```
2216
2250
  */
2217
- writeFile<C extends FileContents>(filePath: string, contents: C, encoding: Encodings): Chainable<C>
2251
+ writeFile(filePath: string, contents: FileContents, encoding: Encodings): Chainable<null>
2218
2252
  /**
2219
2253
  * Write to a file with the specified encoding and contents.
2220
2254
  *
@@ -2223,12 +2257,10 @@ declare namespace Cypress {
2223
2257
  cy.writeFile('path/to/ascii.txt', 'Hello World', {
2224
2258
  flag: 'a+',
2225
2259
  encoding: 'ascii'
2226
- }).then((text) => {
2227
- expect(text).to.equal('Hello World') // true
2228
2260
  })
2229
2261
  ```
2230
2262
  */
2231
- writeFile<C extends FileContents>(filePath: string, contents: C, options?: Partial<WriteFileOptions>): Chainable<C>
2263
+ writeFile(filePath: string, contents: FileContents, options?: Partial<WriteFileOptions & Timeoutable>): Chainable<null>
2232
2264
  /**
2233
2265
  * Write to a file with the specified encoding and contents.
2234
2266
  *
@@ -2238,12 +2270,10 @@ declare namespace Cypress {
2238
2270
  ```
2239
2271
  cy.writeFile('path/to/ascii.txt', 'Hello World', 'utf8', {
2240
2272
  flag: 'a+',
2241
- }).then((text) => {
2242
- expect(text).to.equal('Hello World') // true
2243
2273
  })
2244
2274
  ```
2245
2275
  */
2246
- writeFile<C extends FileContents>(filePath: string, contents: C, encoding: Encodings, options?: Partial<WriteFileOptions>): Chainable<C>
2276
+ writeFile(filePath: string, contents: FileContents, encoding: Encodings, options?: Partial<WriteFileOptions & Timeoutable>): Chainable<null>
2247
2277
 
2248
2278
  /**
2249
2279
  * jQuery library bound to the AUT
@@ -2255,6 +2285,12 @@ declare namespace Cypress {
2255
2285
  $$<TElement extends Element = HTMLElement>(selector: JQuery.Selector, context?: Element | Document | JQuery): JQuery<TElement>
2256
2286
  }
2257
2287
 
2288
+ type ChainableMethods<Subject = any> = {
2289
+ [P in keyof Chainable<Subject>]: Chainable<Subject>[P] extends ((...args: any[]) => any)
2290
+ ? Chainable<Subject>[P]
2291
+ : never
2292
+ }
2293
+
2258
2294
  interface SinonSpyAgent<A extends sinon.SinonSpy> {
2259
2295
  log(shouldOutput?: boolean): Omit<A, 'withArgs'> & Agent<A>
2260
2296
 
@@ -2886,7 +2922,7 @@ declare namespace Cypress {
2886
2922
  xhrUrl: string
2887
2923
  }
2888
2924
 
2889
- interface TestConfigOverrides extends Partial<Pick<ConfigOptions, 'animationDistanceThreshold' | 'baseUrl' | 'defaultCommandTimeout' | 'env' | 'execTimeout' | 'includeShadowDom' | 'requestTimeout' | 'responseTimeout' | 'retries' | 'scrollBehavior' | 'taskTimeout' | 'viewportHeight' | 'viewportWidth' | 'waitForAnimations'>> {
2925
+ interface TestConfigOverrides extends Partial<Pick<ConfigOptions, 'animationDistanceThreshold' | 'baseUrl' | 'blockHosts' | 'defaultCommandTimeout' | 'env' | 'execTimeout' | 'includeShadowDom' | 'numTestsKeptInMemory' | 'pageLoadTimeout' | 'redirectionLimit' | 'requestTimeout' | 'responseTimeout' | 'retries' | 'screenshotOnRunFailure' | 'slowTestThreshold' | 'scrollBehavior' | 'taskTimeout' | 'viewportHeight' | 'viewportWidth' | 'waitForAnimations'>> {
2890
2926
  browser?: IsBrowserMatcher | IsBrowserMatcher[]
2891
2927
  keystrokeDelay?: number
2892
2928
  }
@@ -3086,6 +3122,11 @@ declare namespace Cypress {
3086
3122
  onAnyAbort(route: RouteOptions, proxy: any): void
3087
3123
  }
3088
3124
 
3125
+ interface Session {
3126
+ // Clear all saved sessions and re-run the current spec file.
3127
+ clearAllSavedSessions: () => Promise<void>
3128
+ }
3129
+
3089
3130
  type SameSiteStatus = 'no_restriction' | 'strict' | 'lax'
3090
3131
 
3091
3132
  interface SetCookieOptions extends Loggable, Timeoutable {