cypress 3.1.1 → 3.1.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/lib/cli.js +10 -6
- package/lib/exec/spawn.js +4 -0
- package/lib/tasks/install.js +1 -1
- package/package.json +5 -5
- package/types/index.d.ts +283 -92
- package/types/moment.d.ts +11 -0
package/lib/cli.js
CHANGED
@@ -26,8 +26,7 @@ function unknownOption(flag) {
|
|
26
26
|
logger.error(' error: unknown ' + type + ':', flag);
|
27
27
|
logger.error();
|
28
28
|
this.outputHelp();
|
29
|
-
|
30
|
-
process.exit(1);
|
29
|
+
util.exit(1);
|
31
30
|
}
|
32
31
|
commander.Command.prototype.unknownOption = unknownOption;
|
33
32
|
|
@@ -65,9 +64,9 @@ var descriptions = {
|
|
65
64
|
dev: 'runs cypress in development and bypasses binary check',
|
66
65
|
forceInstall: 'force install the Cypress binary',
|
67
66
|
exit: 'keep the browser open after tests finish',
|
68
|
-
cachePath: 'print the
|
69
|
-
cacheList: 'list
|
70
|
-
cacheClear: 'delete
|
67
|
+
cachePath: 'print the path to the binary cache',
|
68
|
+
cacheList: 'list cached binary versions',
|
69
|
+
cacheClear: 'delete all cached binaries',
|
71
70
|
group: 'a named group for recorded runs in the Cypress dashboard',
|
72
71
|
parallel: 'enables concurrent runs and automatic load balancing of specs across multiple machines or processes',
|
73
72
|
ciBuildId: 'the unique identifier for a run on your CI provider. typically a "BUILD_ID" env var. this value is automatically detected for most CI providers'
|
@@ -140,8 +139,13 @@ module.exports = {
|
|
140
139
|
});
|
141
140
|
|
142
141
|
program.command('cache').usage('[command]').description('Manages the Cypress binary cache').option('list', text('cacheList')).option('path', text('cachePath')).option('clear', text('cacheClear')).action(function (opts) {
|
142
|
+
if (!_.isString(opts)) {
|
143
|
+
this.outputHelp();
|
144
|
+
util.exit(1);
|
145
|
+
}
|
146
|
+
|
143
147
|
if (opts.command || !_.includes(['list', 'path', 'clear'], opts)) {
|
144
|
-
unknownOption.call(this, 'cache ' + opts, '
|
148
|
+
unknownOption.call(this, 'cache ' + opts, 'command');
|
145
149
|
}
|
146
150
|
|
147
151
|
cache[opts]();
|
package/lib/exec/spawn.js
CHANGED
@@ -80,6 +80,7 @@ module.exports = {
|
|
80
80
|
}
|
81
81
|
|
82
82
|
var overrides = util.getEnvOverrides();
|
83
|
+
var node11WindowsFix = isPlatform('win32');
|
83
84
|
|
84
85
|
debug('spawning Cypress with executable: %s', executable);
|
85
86
|
debug('spawn forcing env overrides %o', overrides);
|
@@ -93,6 +94,9 @@ module.exports = {
|
|
93
94
|
// also figure out whether we should force stdout and stderr into thinking
|
94
95
|
// it is a tty as opposed to a pipe.
|
95
96
|
options.env = _.extend({}, options.env, overrides);
|
97
|
+
if (node11WindowsFix) {
|
98
|
+
options = _.extend({}, options, { windowsHide: false });
|
99
|
+
}
|
96
100
|
|
97
101
|
var child = cp.spawn(executable, args, options);
|
98
102
|
|
package/lib/tasks/install.js
CHANGED
@@ -5,7 +5,7 @@ var _templateObject = _taggedTemplateLiteral([' \n Skipping installation
|
|
5
5
|
_templateObject3 = _taggedTemplateLiteral(['\n ', ' Skipping binary installation: Environment variable CYPRESS_INSTALL_BINARY = 0.'], ['\n ', ' Skipping binary installation: Environment variable CYPRESS_INSTALL_BINARY = 0.']),
|
6
6
|
_templateObject4 = _taggedTemplateLiteral(['\n ', ' Overriding Cypress cache directory to: ', '\n\n Previous installs of Cypress may not be found.\n '], ['\n ', ' Overriding Cypress cache directory to: ', '\n\n Previous installs of Cypress may not be found.\n ']),
|
7
7
|
_templateObject5 = _taggedTemplateLiteral(['\n Failed to access ', ':\n\n ', '\n '], ['\n Failed to access ', ':\n\n ', '\n ']),
|
8
|
-
_templateObject6 = _taggedTemplateLiteral(['\n Cypress ', ' is
|
8
|
+
_templateObject6 = _taggedTemplateLiteral(['\n Cypress ', ' is installed in ', '\n '], ['\n Cypress ', ' is installed in ', '\n ']),
|
9
9
|
_templateObject7 = _taggedTemplateLiteral(['\n ', ' Warning: Forcing a binary version different than the default.\n\n The CLI expected to install version: ', '\n\n Instead we will install version: ', '\n\n These versions may not work properly together.\n '], ['\n ', ' Warning: Forcing a binary version different than the default.\n\n The CLI expected to install version: ', '\n\n Instead we will install version: ', '\n\n These versions may not work properly together.\n ']);
|
10
10
|
|
11
11
|
function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "cypress",
|
3
|
-
"version": "3.1.
|
3
|
+
"version": "3.1.5",
|
4
4
|
"main": "index.js",
|
5
5
|
"bin": {
|
6
6
|
"cypress": "bin/cypress"
|
@@ -30,8 +30,8 @@
|
|
30
30
|
"@types/lodash": "4.14.87",
|
31
31
|
"@types/minimatch": "3.0.3",
|
32
32
|
"@types/mocha": "2.2.44",
|
33
|
-
"@types/sinon": "
|
34
|
-
"@types/sinon-chai": "2.
|
33
|
+
"@types/sinon": "7.0.0",
|
34
|
+
"@types/sinon-chai": "3.2.2",
|
35
35
|
"bluebird": "3.5.0",
|
36
36
|
"cachedir": "1.3.0",
|
37
37
|
"chalk": "2.4.1",
|
@@ -49,10 +49,10 @@
|
|
49
49
|
"is-installed-globally": "0.1.0",
|
50
50
|
"lazy-ass": "1.6.0",
|
51
51
|
"listr": "0.12.0",
|
52
|
-
"lodash": "4.17.
|
52
|
+
"lodash": "4.17.11",
|
53
53
|
"log-symbols": "2.2.0",
|
54
54
|
"minimist": "1.2.0",
|
55
|
-
"
|
55
|
+
"moment": "2.22.2",
|
56
56
|
"ramda": "0.24.1",
|
57
57
|
"request": "2.87.0",
|
58
58
|
"request-progress": "0.3.1",
|
package/types/index.d.ts
CHANGED
@@ -4,18 +4,20 @@
|
|
4
4
|
// Mike Woudenberg <https://github.com/mikewoudenberg>
|
5
5
|
// Robbert van Markus <https://github.com/rvanmarkus>
|
6
6
|
// Nicholas Boll <https://github.com/nicholasboll>
|
7
|
-
// TypeScript Version: 2.
|
7
|
+
// TypeScript Version: 2.8
|
8
8
|
// Updated by the Cypress team: https://www.cypress.io/about/
|
9
9
|
|
10
10
|
/// <reference path="./blob-util.d.ts" />
|
11
11
|
/// <reference path="./bluebird.d.ts" />
|
12
12
|
/// <reference path="./minimatch.d.ts" />
|
13
|
+
/// <reference path="./moment.d.ts" />
|
13
14
|
|
14
15
|
/// <reference types="chai" />
|
15
16
|
/// <reference types="chai-jquery" />
|
16
17
|
/// <reference types="jquery" />
|
17
18
|
/// <reference types="lodash" />
|
18
19
|
/// <reference types="mocha" />
|
20
|
+
/// <reference types="moment" />
|
19
21
|
/// <reference types="sinon" />
|
20
22
|
/// <reference types="sinon-chai" />
|
21
23
|
|
@@ -100,7 +102,7 @@ declare namespace Cypress {
|
|
100
102
|
* @example
|
101
103
|
* const todaysDate = Cypress.moment().format("MMM DD, YYYY")
|
102
104
|
*/
|
103
|
-
moment:
|
105
|
+
moment: Moment.MomentStatic
|
104
106
|
/**
|
105
107
|
* Cypress automatically includes Bluebird and exposes it as Cypress.Promise.
|
106
108
|
*
|
@@ -114,10 +116,12 @@ declare namespace Cypress {
|
|
114
116
|
* Cypress version string. i.e. "1.1.2"
|
115
117
|
* @see https://on.cypress.io/version
|
116
118
|
* @example
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
119
|
+
```
|
120
|
+
expect(Cypress.version).to.be.a('string')
|
121
|
+
if (Cypress.version === '1.2.0') {
|
122
|
+
// test something specific
|
123
|
+
}
|
124
|
+
```
|
121
125
|
*/
|
122
126
|
version: string
|
123
127
|
|
@@ -141,6 +145,15 @@ declare namespace Cypress {
|
|
141
145
|
|
142
146
|
/**
|
143
147
|
* Currently executing spec file.
|
148
|
+
* @example
|
149
|
+
```
|
150
|
+
Cypress.spec
|
151
|
+
// {
|
152
|
+
// name: "config_passing_spec.coffee",
|
153
|
+
// relative: "cypress/integration/config_passing_spec.coffee",
|
154
|
+
// absolute: "/users/smith/projects/web/cypress/integration/config_passing_spec.coffee"
|
155
|
+
// }
|
156
|
+
```
|
144
157
|
*/
|
145
158
|
spec: {
|
146
159
|
name: string // "config_passing_spec.coffee"
|
@@ -154,11 +167,45 @@ declare namespace Cypress {
|
|
154
167
|
browser: Browser
|
155
168
|
|
156
169
|
/**
|
170
|
+
* Returns all configuration objects.
|
157
171
|
* @see https://on.cypress.io/config
|
172
|
+
* @example
|
173
|
+
```
|
174
|
+
Cypress.config()
|
175
|
+
// {defaultCommandTimeout: 10000, pageLoadTimeout: 30000, ...}
|
176
|
+
```
|
158
177
|
*/
|
159
178
|
config(): ConfigOptions
|
179
|
+
/**
|
180
|
+
* Returns one configuration value.
|
181
|
+
* @see https://on.cypress.io/config
|
182
|
+
* @example
|
183
|
+
```
|
184
|
+
Cypress.config('pageLoadTimeout')
|
185
|
+
// 60000
|
186
|
+
```
|
187
|
+
*/
|
160
188
|
config<K extends keyof ConfigOptions>(key: K): ConfigOptions[K]
|
189
|
+
/**
|
190
|
+
* Sets one configuration value.
|
191
|
+
* @see https://on.cypress.io/config
|
192
|
+
* @example
|
193
|
+
```
|
194
|
+
Cypress.config('viewportWidth', 800)
|
195
|
+
```
|
196
|
+
*/
|
161
197
|
config<K extends keyof ConfigOptions>(key: K, value: ConfigOptions[K]): void
|
198
|
+
/**
|
199
|
+
* Sets multiple configuration values at once.
|
200
|
+
* @see https://on.cypress.io/config
|
201
|
+
* @example
|
202
|
+
```
|
203
|
+
Cypress.config({
|
204
|
+
defaultCommandTimeout: 10000,
|
205
|
+
viewportHeight: 900
|
206
|
+
})
|
207
|
+
```
|
208
|
+
*/
|
162
209
|
config(Object: Partial<ConfigOptions>): void
|
163
210
|
|
164
211
|
// no real way to type without generics
|
@@ -275,16 +322,20 @@ declare namespace Cypress {
|
|
275
322
|
* @see https://on.cypress.io/variables-and-aliases
|
276
323
|
* @see https://on.cypress.io/get
|
277
324
|
* @example
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
325
|
+
```
|
326
|
+
// Get the aliased ‘todos’ elements
|
327
|
+
cy.get('ul#todos').as('todos')
|
328
|
+
//...hack hack hack...
|
329
|
+
// later retrieve the todos
|
330
|
+
cy.get('@todos')
|
331
|
+
```
|
283
332
|
*/
|
284
333
|
as(alias: string): Chainable<Subject>
|
285
334
|
|
286
335
|
/**
|
287
|
-
* Blur a focused element. This element must currently be in focus.
|
336
|
+
* Blur a focused element. This element must currently be in focus.
|
337
|
+
* If you want to ensure an element is focused before blurring,
|
338
|
+
* try using .focus() before .blur().
|
288
339
|
*
|
289
340
|
* @see https://on.cypress.io/blur
|
290
341
|
*/
|
@@ -353,19 +404,29 @@ declare namespace Cypress {
|
|
353
404
|
* to clear localStorage inside a single test. Yields `localStorage` object.
|
354
405
|
*
|
355
406
|
* @see https://on.cypress.io/clearlocalstorage
|
356
|
-
* @
|
357
|
-
*
|
358
|
-
|
359
|
-
|
407
|
+
* @param {string} [key] - name of a particular item to remove (optional).
|
408
|
+
* @example
|
409
|
+
```
|
410
|
+
// removes all local storage keys
|
411
|
+
cy.clearLocalStorage()
|
412
|
+
.should(ls => {
|
413
|
+
expect(ls.getItem('prop1')).to.be.null
|
414
|
+
})
|
415
|
+
// removes item "todos"
|
416
|
+
cy.clearLocalStorage("todos")
|
417
|
+
```
|
360
418
|
*/
|
361
419
|
clearLocalStorage(key?: string): Chainable<Storage>
|
362
420
|
/**
|
363
421
|
* Clear keys in local storage that match given regular expression.
|
364
422
|
*
|
365
423
|
* @see https://on.cypress.io/clearlocalstorage
|
424
|
+
* @param {RegExp} re - regular expression to match.
|
366
425
|
* @example
|
367
|
-
|
368
|
-
|
426
|
+
```
|
427
|
+
// Clear all local storage matching /app-/
|
428
|
+
cy.clearLocalStorage(/app-/)
|
429
|
+
```
|
369
430
|
*/
|
370
431
|
clearLocalStorage(re: RegExp): Chainable<Storage>
|
371
432
|
|
@@ -382,7 +443,8 @@ declare namespace Cypress {
|
|
382
443
|
/**
|
383
444
|
* Click a DOM element at specific corner / side.
|
384
445
|
*
|
385
|
-
* @param {String} position The position where the click should be issued.
|
446
|
+
* @param {String} position - The position where the click should be issued.
|
447
|
+
* The `center` position is the default position.
|
386
448
|
* @see https://on.cypress.io/click
|
387
449
|
* @example
|
388
450
|
* cy.get('button').click('topRight')
|
@@ -395,9 +457,11 @@ declare namespace Cypress {
|
|
395
457
|
* @param {number} y The distance in pixels from the element’s top to issue the click.
|
396
458
|
* @see https://on.cypress.io/click
|
397
459
|
* @example
|
398
|
-
|
399
|
-
|
400
|
-
|
460
|
+
```
|
461
|
+
// The click below will be issued inside of the element
|
462
|
+
// (15px from the left and 40px from the top).
|
463
|
+
cy.get('button').click(15, 40)
|
464
|
+
```
|
401
465
|
*/
|
402
466
|
click(x: number, y: number, options?: Partial<ClickOptions>): Chainable<Subject>
|
403
467
|
|
@@ -621,9 +685,11 @@ declare namespace Cypress {
|
|
621
685
|
fixture<Contents = any>(path: string, encoding: Encodings, options?: Partial<Timeoutable>): Chainable<Contents> // no log?
|
622
686
|
|
623
687
|
/**
|
624
|
-
*
|
688
|
+
* Focus on a DOM element.
|
625
689
|
*
|
626
690
|
* @see https://on.cypress.io/focus
|
691
|
+
* @example
|
692
|
+
* cy.get('input').first().focus() // Focus on the first input
|
627
693
|
*/
|
628
694
|
focus(options?: Partial<Loggable & Timeoutable>): Chainable<Subject>
|
629
695
|
|
@@ -1325,19 +1391,46 @@ declare namespace Cypress {
|
|
1325
1391
|
*
|
1326
1392
|
* @see https://on.cypress.io/then
|
1327
1393
|
*/
|
1328
|
-
then<S>(fn: (this: ObjectLike, currentSubject: Subject) => Chainable<S
|
1394
|
+
then<S>(fn: (this: ObjectLike, currentSubject: Subject) => Chainable<S>): Chainable<S>
|
1395
|
+
/**
|
1396
|
+
* Enables you to work with the subject yielded from the previous command.
|
1397
|
+
*
|
1398
|
+
* @see https://on.cypress.io/then
|
1399
|
+
*/
|
1400
|
+
then<S>(options: Partial<Timeoutable>, fn: (this: ObjectLike, currentSubject: Subject) => Chainable<S>): Chainable<S>
|
1401
|
+
/**
|
1402
|
+
* Enables you to work with the subject yielded from the previous command / promise.
|
1403
|
+
*
|
1404
|
+
* @see https://on.cypress.io/then
|
1405
|
+
*/
|
1406
|
+
then<S>(fn: (this: ObjectLike, currentSubject: Subject) => PromiseLike<S>): Chainable<S>
|
1407
|
+
/**
|
1408
|
+
* Enables you to work with the subject yielded from the previous command / promise.
|
1409
|
+
*
|
1410
|
+
* @see https://on.cypress.io/then
|
1411
|
+
*/
|
1412
|
+
then<S>(options: Partial<Timeoutable>, fn: (this: ObjectLike, currentSubject: Subject) => PromiseLike<S>): Chainable<S>
|
1329
1413
|
/**
|
1330
1414
|
* Enables you to work with the subject yielded from the previous command / promise.
|
1331
1415
|
*
|
1332
1416
|
* @see https://on.cypress.io/then
|
1333
1417
|
*/
|
1334
|
-
then<S>(fn: (this: ObjectLike, currentSubject: Subject) =>
|
1418
|
+
then<S extends object | any[] | string | number | boolean>(fn: (this: ObjectLike, currentSubject: Subject) => S): Chainable<S>
|
1335
1419
|
/**
|
1336
1420
|
* Enables you to work with the subject yielded from the previous command / promise.
|
1337
1421
|
*
|
1338
1422
|
* @see https://on.cypress.io/then
|
1339
1423
|
*/
|
1340
|
-
then<S extends object | any[] | string | number | boolean>(fn: (this: ObjectLike, currentSubject: Subject) => S
|
1424
|
+
then<S extends object | any[] | string | number | boolean>(options: Partial<Timeoutable>, fn: (this: ObjectLike, currentSubject: Subject) => S): Chainable<S>
|
1425
|
+
/**
|
1426
|
+
* Enables you to work with the subject yielded from the previous command.
|
1427
|
+
*
|
1428
|
+
* @see https://on.cypress.io/then
|
1429
|
+
* @example
|
1430
|
+
* cy.get('.nav').then(($nav) => {}) // Yields .nav as first arg
|
1431
|
+
* cy.location().then((loc) => {}) // Yields location object as first arg
|
1432
|
+
*/
|
1433
|
+
then(fn: (this: ObjectLike, currentSubject: Subject) => void): Chainable<Subject>
|
1341
1434
|
/**
|
1342
1435
|
* Enables you to work with the subject yielded from the previous command.
|
1343
1436
|
*
|
@@ -1346,7 +1439,7 @@ declare namespace Cypress {
|
|
1346
1439
|
* cy.get('.nav').then(($nav) => {}) // Yields .nav as first arg
|
1347
1440
|
* cy.location().then((loc) => {}) // Yields location object as first arg
|
1348
1441
|
*/
|
1349
|
-
then(fn: (this: ObjectLike, currentSubject: Subject) => void
|
1442
|
+
then(options: Partial<Timeoutable>, fn: (this: ObjectLike, currentSubject: Subject) => void): Chainable<Subject>
|
1350
1443
|
|
1351
1444
|
/**
|
1352
1445
|
* Move time after overriding a native time function with [cy.clock()](https://on.cypress.io/clock).
|
@@ -1500,9 +1593,12 @@ declare namespace Cypress {
|
|
1500
1593
|
visit(url: string, options?: Partial<VisitOptions>): Chainable<Window>
|
1501
1594
|
|
1502
1595
|
/**
|
1503
|
-
* Wait for a number of milliseconds
|
1596
|
+
* Wait for a number of milliseconds.
|
1597
|
+
* You almost never need to wait for an arbitrary period of time.
|
1598
|
+
* There are always better ways to express this in Cypress, see the documentation.
|
1504
1599
|
*
|
1505
1600
|
* @see https://on.cypress.io/wait
|
1601
|
+
* @param {number} ms - Milliseconds to wait.
|
1506
1602
|
* @example
|
1507
1603
|
* cy.wait(1000) // wait for 1 second
|
1508
1604
|
*/
|
@@ -1511,25 +1607,59 @@ declare namespace Cypress {
|
|
1511
1607
|
* Wait for a specific XHR to respond.
|
1512
1608
|
*
|
1513
1609
|
* @see https://on.cypress.io/wait
|
1514
|
-
|
1515
|
-
|
1610
|
+
* @param {string} alias - Name of the alias to wait for.
|
1611
|
+
*
|
1612
|
+
```
|
1613
|
+
// Wait for the route aliased as 'getAccount' to respond
|
1614
|
+
// without changing or stubbing its response
|
1615
|
+
cy.server()
|
1616
|
+
cy.route('/accounts/*').as('getAccount')
|
1617
|
+
cy.visit('/accounts/123')
|
1618
|
+
cy.wait('@getAccount').then((xhr) => {
|
1619
|
+
// we can now access the low level xhr
|
1620
|
+
// that contains the request body,
|
1621
|
+
// response body, status, etc
|
1622
|
+
})
|
1623
|
+
```
|
1624
|
+
*/
|
1625
|
+
wait(alias: string, options?: Partial<Loggable & Timeoutable & TimeoutableXHR>): Chainable<WaitXHR>
|
1516
1626
|
/**
|
1517
1627
|
* Wait for list of XHR requests to complete.
|
1518
1628
|
*
|
1519
1629
|
* @see https://on.cypress.io/wait
|
1630
|
+
* @param {string[]} aliases - An array of aliased routes as defined using the `.as()` command.
|
1631
|
+
*
|
1632
|
+
```
|
1633
|
+
// wait for 3 XHR requests to complete
|
1634
|
+
cy.server()
|
1635
|
+
cy.route('users/*').as('getUsers')
|
1636
|
+
cy.route('activities/*').as('getActivities')
|
1637
|
+
cy.route('comments/*').as('getComments')
|
1638
|
+
cy.visit('/dashboard')
|
1639
|
+
|
1640
|
+
cy.wait(['@getUsers', '@getActivities', '@getComments'])
|
1641
|
+
.then((xhrs) => {
|
1642
|
+
// xhrs will now be an array of matching XHR's
|
1643
|
+
// xhrs[0] <-- getUsers
|
1644
|
+
// xhrs[1] <-- getActivities
|
1645
|
+
// xhrs[2] <-- getComments
|
1646
|
+
})
|
1647
|
+
```
|
1520
1648
|
*/
|
1521
|
-
wait(alias: string[], options?: Partial<Loggable & Timeoutable>): Chainable<WaitXHR[]>
|
1649
|
+
wait(alias: string[], options?: Partial<Loggable & Timeoutable & TimeoutableXHR>): Chainable<WaitXHR[]>
|
1522
1650
|
|
1523
1651
|
/**
|
1524
1652
|
* Get the window object of the page that is currently active.
|
1525
1653
|
*
|
1526
1654
|
* @see https://on.cypress.io/window
|
1527
1655
|
* @example
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1656
|
+
```
|
1657
|
+
cy.visit('http://localhost:8080/app')
|
1658
|
+
cy.window().then(function(win){
|
1659
|
+
// win is the remote window
|
1660
|
+
// of the page at: http://localhost:8080/app
|
1661
|
+
})
|
1662
|
+
```
|
1533
1663
|
*/
|
1534
1664
|
window(options?: Partial<Loggable & Timeoutable>): Chainable<Window>
|
1535
1665
|
|
@@ -1538,14 +1668,15 @@ declare namespace Cypress {
|
|
1538
1668
|
* Useful when working within a particular group of elements such as a `<form>`.
|
1539
1669
|
* @see https://on.cypress.io/within
|
1540
1670
|
* @example
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1671
|
+
```
|
1672
|
+
cy.get('form').within(($form) => {
|
1673
|
+
// cy.get() will only search for elements within form,
|
1674
|
+
// not within the entire document
|
1675
|
+
cy.get('input[name="username"]').type('john')
|
1676
|
+
cy.get('input[name="password"]').type('password')
|
1677
|
+
cy.root().submit()
|
1678
|
+
})
|
1679
|
+
```
|
1549
1680
|
*/
|
1550
1681
|
within(fn: (currentSubject: Subject) => void): Chainable<Subject>
|
1551
1682
|
/**
|
@@ -1560,21 +1691,38 @@ declare namespace Cypress {
|
|
1560
1691
|
*
|
1561
1692
|
* @see https://on.cypress.io/wrap
|
1562
1693
|
* @example
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1694
|
+
```
|
1695
|
+
// wraps DOM element
|
1696
|
+
cy.get('form').within(($form) => {
|
1697
|
+
// more commands
|
1698
|
+
cy.wrap($form).should('have.class', 'form-container')
|
1699
|
+
})
|
1700
|
+
```
|
1567
1701
|
*/
|
1568
1702
|
wrap<E extends Node = HTMLElement>(element: E | JQuery<E>, options?: Partial<Loggable & Timeoutable>): Chainable<JQuery<E>>
|
1703
|
+
/**
|
1704
|
+
* Yield the element passed into `.wrap()` to the next command in the Cypress chain.
|
1705
|
+
*
|
1706
|
+
* @see https://on.cypress.io/wrap
|
1707
|
+
* @example
|
1708
|
+
```
|
1709
|
+
cy.wrap(new Promise((resolve, reject) => {
|
1710
|
+
setTimeout(resolve, 1000);
|
1711
|
+
}).then(result => {})
|
1712
|
+
```
|
1713
|
+
*/
|
1714
|
+
wrap<F extends Promise<S>, S>(promise: F, options?: Partial<Loggable & Timeoutable>): Chainable<S>
|
1569
1715
|
/**
|
1570
1716
|
* Yields whatever is passed into `.wrap()` to the next command in the Cypress chain.
|
1571
1717
|
*
|
1572
1718
|
* @see https://on.cypress.io/wrap
|
1573
1719
|
* @example
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1720
|
+
```
|
1721
|
+
// Make assertions about object
|
1722
|
+
cy.wrap({ amount: 10 })
|
1723
|
+
.should('have.property', 'amount')
|
1724
|
+
.and('eq', 10)
|
1725
|
+
```
|
1578
1726
|
*/
|
1579
1727
|
wrap<S>(object: S, options?: Partial<Loggable & Timeoutable>): Chainable<S>
|
1580
1728
|
|
@@ -1582,6 +1730,12 @@ declare namespace Cypress {
|
|
1582
1730
|
* Write to a file with the specified contents.
|
1583
1731
|
*
|
1584
1732
|
* @see https://on.cypress.io/writefile
|
1733
|
+
```
|
1734
|
+
cy.writeFile('path/to/message.txt', 'Hello World')
|
1735
|
+
.then((text) => {
|
1736
|
+
expect(text).to.equal('Hello World') // true
|
1737
|
+
})
|
1738
|
+
```
|
1585
1739
|
*/
|
1586
1740
|
writeFile<C extends FileContents>(filePath: string, contents: C, options?: Partial<Loggable>): Chainable<C>
|
1587
1741
|
/**
|
@@ -1645,6 +1799,26 @@ declare namespace Cypress {
|
|
1645
1799
|
timeout: number
|
1646
1800
|
}
|
1647
1801
|
|
1802
|
+
/**
|
1803
|
+
* Options that control how long the Test Runner waits for an XHR request and response to succeed
|
1804
|
+
*/
|
1805
|
+
interface TimeoutableXHR {
|
1806
|
+
/**
|
1807
|
+
* Time to wait for the request (ms)
|
1808
|
+
*
|
1809
|
+
* @default {@link Timeoutable#timeout}
|
1810
|
+
* @see https://docs.cypress.io/guides/references/configuration.html#Timeouts
|
1811
|
+
*/
|
1812
|
+
requestTimeout: number,
|
1813
|
+
/**
|
1814
|
+
* Time to wait for the response (ms)
|
1815
|
+
*
|
1816
|
+
* @default {@link Timeoutable#timeout}
|
1817
|
+
* @see https://docs.cypress.io/guides/references/configuration.html#Timeouts
|
1818
|
+
*/
|
1819
|
+
responseTimeout: number
|
1820
|
+
}
|
1821
|
+
|
1648
1822
|
/**
|
1649
1823
|
* Options to force an event, skipping Actionability check
|
1650
1824
|
* @see https://docs.cypress.io/guides/core-concepts/interacting-with-elements.html#Actionability
|
@@ -1847,6 +2021,9 @@ declare namespace Cypress {
|
|
1847
2021
|
env: object
|
1848
2022
|
}
|
1849
2023
|
|
2024
|
+
/**
|
2025
|
+
* Full set of possible options for cy.request call
|
2026
|
+
*/
|
1850
2027
|
interface RequestOptions extends Loggable, Timeoutable {
|
1851
2028
|
auth: object
|
1852
2029
|
body: RequestBody
|
@@ -1856,7 +2033,7 @@ declare namespace Cypress {
|
|
1856
2033
|
gzip: boolean
|
1857
2034
|
headers: object
|
1858
2035
|
method: HttpMethod
|
1859
|
-
qs:
|
2036
|
+
qs: object
|
1860
2037
|
url: string
|
1861
2038
|
}
|
1862
2039
|
|
@@ -1922,6 +2099,10 @@ declare namespace Cypress {
|
|
1922
2099
|
interval: number
|
1923
2100
|
}
|
1924
2101
|
|
2102
|
+
/**
|
2103
|
+
* Setting default options for cy.server()
|
2104
|
+
* @see https://on.cypress.io/server
|
2105
|
+
*/
|
1925
2106
|
interface ServerOptions {
|
1926
2107
|
delay: number
|
1927
2108
|
method: HttpMethod
|
@@ -1934,7 +2115,7 @@ declare namespace Cypress {
|
|
1934
2115
|
enable: boolean
|
1935
2116
|
force404: boolean
|
1936
2117
|
urlMatchingOptions: object
|
1937
|
-
whitelist(
|
2118
|
+
whitelist(xhr: Request): void
|
1938
2119
|
}
|
1939
2120
|
|
1940
2121
|
interface SetCookieOptions extends Loggable, Timeoutable {
|
@@ -3635,26 +3816,28 @@ declare namespace Cypress {
|
|
3635
3816
|
* Fires when an uncaught exception occurs in your application.
|
3636
3817
|
* Cypress will fail the test when this fires.
|
3637
3818
|
* Return `false` from this event and Cypress will not fail the test. Also useful for debugging purposes because the actual `error` instance is provided to you.
|
3638
|
-
* @example
|
3639
|
-
* // likely want to do this in a support file
|
3640
|
-
* // so it's applied to all spec files
|
3641
|
-
* // cypress/support/index.js
|
3642
|
-
*
|
3643
|
-
* Cypress.on('uncaught:exception', (err, runnable) => {
|
3644
|
-
* // returning false here prevents Cypress from
|
3645
|
-
* // failing the test
|
3646
|
-
* return false
|
3647
|
-
* })
|
3648
|
-
* // stub "window.alert" in a single test
|
3649
|
-
* it('shows alert', () => {
|
3650
|
-
* const stub = cy.stub()
|
3651
|
-
* cy.on('window:alert', stub)
|
3652
|
-
* // trigger application code that calls alert(...)
|
3653
|
-
* .then(() => {
|
3654
|
-
* expect(stub).to.have.been.calledOnce
|
3655
|
-
* })
|
3656
|
-
* })
|
3657
3819
|
* @see https://on.cypress.io/catalog-of-events#App-Events
|
3820
|
+
* @example
|
3821
|
+
```
|
3822
|
+
// likely want to do this in a support file
|
3823
|
+
// so it's applied to all spec files
|
3824
|
+
// cypress/support/index.js
|
3825
|
+
|
3826
|
+
Cypress.on('uncaught:exception', (err, runnable) => {
|
3827
|
+
// returning false here prevents Cypress from
|
3828
|
+
// failing the test
|
3829
|
+
return false
|
3830
|
+
})
|
3831
|
+
// stub "window.alert" in a single test
|
3832
|
+
it('shows alert', () => {
|
3833
|
+
const stub = cy.stub()
|
3834
|
+
cy.on('window:alert', stub)
|
3835
|
+
// trigger application code that calls alert(...)
|
3836
|
+
.then(() => {
|
3837
|
+
expect(stub).to.have.been.calledOnce
|
3838
|
+
})
|
3839
|
+
})
|
3840
|
+
```
|
3658
3841
|
*/
|
3659
3842
|
(action: 'uncaught:exception', fn: (error: Error, runnable: Mocha.IRunnable) => false | void): void
|
3660
3843
|
/**
|
@@ -3662,23 +3845,28 @@ declare namespace Cypress {
|
|
3662
3845
|
* Cypress will auto accept confirmations. Return `false` from this event and the confirmation will be cancelled.
|
3663
3846
|
* @see https://on.cypress.io/catalog-of-events#App-Events
|
3664
3847
|
* @example
|
3665
|
-
|
3666
|
-
|
3667
|
-
|
3668
|
-
|
3848
|
+
```
|
3849
|
+
cy.on('window:confirm', (str) => {
|
3850
|
+
console.log(str)
|
3851
|
+
return false // simulate "Cancel"
|
3852
|
+
})
|
3853
|
+
```
|
3669
3854
|
*/
|
3670
3855
|
(action: 'window:confirm', fn: ((text: string) => false | void) | Agent<sinon.SinonSpy>): void
|
3671
3856
|
/**
|
3672
3857
|
* Fires when your app calls the global `window.alert()` method.
|
3673
3858
|
* Cypress will auto accept alerts. You cannot change this behavior.
|
3674
3859
|
* @example
|
3675
|
-
|
3676
|
-
|
3677
|
-
|
3678
|
-
|
3679
|
-
|
3680
|
-
|
3681
|
-
|
3860
|
+
```
|
3861
|
+
const stub = cy.stub()
|
3862
|
+
cy.on('window:alert', stub)
|
3863
|
+
// assume the button calls window.alert()
|
3864
|
+
cy.get('.my-button')
|
3865
|
+
.click()
|
3866
|
+
.then(() => {
|
3867
|
+
expect(stub).to.have.been.calledOnce
|
3868
|
+
})
|
3869
|
+
```
|
3682
3870
|
* @see https://on.cypress.io/catalog-of-events#App-Events
|
3683
3871
|
*/
|
3684
3872
|
(action: 'window:alert', fn: ((text: string) => void) | Agent<sinon.SinonSpy>): void
|
@@ -3892,26 +4080,29 @@ declare namespace Cypress {
|
|
3892
4080
|
left: number
|
3893
4081
|
}
|
3894
4082
|
|
3895
|
-
// Diff
|
4083
|
+
// Diff taken from https://github.com/Microsoft/TypeScript/issues/12215#issuecomment-311923766
|
3896
4084
|
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T]
|
3897
|
-
|
3898
|
-
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>
|
4085
|
+
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
|
3899
4086
|
}
|
3900
4087
|
|
3901
4088
|
/**
|
3902
4089
|
* Global variables `cy` added by Cypress with all API commands.
|
3903
4090
|
* @see https://on.cypress.io/api
|
3904
4091
|
* @example
|
3905
|
-
|
3906
|
-
|
4092
|
+
```
|
4093
|
+
cy.get('button').click()
|
4094
|
+
cy.get('.result').contains('Expected text')
|
4095
|
+
```
|
3907
4096
|
*/
|
3908
4097
|
declare const cy: Cypress.Chainable<undefined>
|
3909
4098
|
/**
|
3910
4099
|
* Global variable `Cypress` holds common utilities and constants.
|
3911
4100
|
* @see https://on.cypress.io/api
|
3912
4101
|
* @example
|
3913
|
-
|
3914
|
-
|
3915
|
-
|
4102
|
+
```
|
4103
|
+
Cypress.config("pageLoadTimeout") // => 60000
|
4104
|
+
Cypress.version // => "1.4.0"
|
4105
|
+
Cypress._ // => Lodash _
|
4106
|
+
```
|
3916
4107
|
*/
|
3917
4108
|
declare const Cypress: Cypress.Cypress
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// Shim definition to export a namespace. Cypress is actually a global module
|
2
|
+
// so import/export isn't allowed there. We import here and define a global module
|
3
|
+
// so that Cypress can get and use the Moment type
|
4
|
+
// tslint:disable-next-line:no-implicit-dependencies
|
5
|
+
import * as moment from 'moment'
|
6
|
+
export = Moment
|
7
|
+
export as namespace Moment
|
8
|
+
|
9
|
+
declare namespace Moment {
|
10
|
+
type MomentStatic = typeof moment
|
11
|
+
}
|