cypress 4.9.0 → 4.12.1
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 +90 -8
- package/lib/cypress.js +17 -0
- package/package.json +38 -38
- package/types/cypress-npm-api.d.ts +30 -3
- package/types/cypress.d.ts +424 -67
- package/types/sinon/index.d.ts +6 -2
- package/types/sinon/ts3.1/index.d.ts +6 -1
package/lib/cli.js
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
4
|
+
|
5
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
6
|
+
|
7
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
8
|
+
|
9
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
10
|
+
|
3
11
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
4
12
|
|
5
13
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
@@ -14,6 +22,8 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
22
|
|
15
23
|
var _ = require('lodash');
|
16
24
|
|
25
|
+
var R = require('ramda');
|
26
|
+
|
17
27
|
var commander = require('commander');
|
18
28
|
|
19
29
|
var _require = require('common-tags'),
|
@@ -49,6 +59,10 @@ var coerceFalse = function coerceFalse(arg) {
|
|
49
59
|
return arg !== 'false';
|
50
60
|
};
|
51
61
|
|
62
|
+
var coerceAnyStringToInt = function coerceAnyStringToInt(arg) {
|
63
|
+
return typeof arg === 'string' ? parseInt(arg) : arg;
|
64
|
+
};
|
65
|
+
|
52
66
|
var spaceDelimitedArgsMsg = function spaceDelimitedArgsMsg(flag, args) {
|
53
67
|
var msg = "\n ".concat(logSymbols.warning, " Warning: It looks like you're passing --").concat(flag, " a space-separated list of arguments:\n\n \"").concat(args.join(' '), "\"\n\n This will work, but it's not recommended.\n\n If you are trying to pass multiple arguments, separate them with commas instead:\n cypress run --").concat(flag, " arg1,arg2,arg3\n ");
|
54
68
|
|
@@ -155,7 +169,79 @@ function showVersions() {
|
|
155
169
|
})["catch"](util.logErrorExit1);
|
156
170
|
}
|
157
171
|
|
172
|
+
var createProgram = function createProgram() {
|
173
|
+
var program = new commander.Command(); // bug in commander not printing name
|
174
|
+
// in usage help docs
|
175
|
+
|
176
|
+
program._name = 'cypress';
|
177
|
+
program.usage('<command> [options]');
|
178
|
+
return program;
|
179
|
+
};
|
180
|
+
|
181
|
+
var addCypressRunCommand = function addCypressRunCommand(program) {
|
182
|
+
return program.command('run').usage('[options]').description('Runs Cypress tests from the CLI without the GUI').option('-b, --browser <browser-name-or-path>', text('browserRunMode')).option('--ci-build-id <id>', text('ciBuildId')).option('-c, --config <config>', text('config')).option('-C, --config-file <config-file>', text('configFile')).option('-e, --env <env>', text('env')).option('--group <name>', text('group')).option('-k, --key <record-key>', text('key')).option('--headed', text('headed')).option('--headless', text('headless')).option('--no-exit', text('exit')).option('--parallel', text('parallel')).option('-p, --port <port>', text('port')).option('-P, --project <project-path>', text('project')).option('-q, --quiet', text('quiet')).option('--record [bool]', text('record'), coerceFalse).option('-r, --reporter <reporter>', text('reporter')).option('-o, --reporter-options <reporter-options>', text('reporterOptions')).option('-s, --spec <spec>', text('spec')).option('-t, --tag <tag>', text('tag')).option('--dev', text('dev'), coerceFalse);
|
183
|
+
};
|
184
|
+
/**
|
185
|
+
* Casts known command line options for "cypress run" to their intended type.
|
186
|
+
* For example if the user passes "--port 5005" the ".port" property should be
|
187
|
+
* a number 5005 and not a string "5005".
|
188
|
+
*
|
189
|
+
* Returns a clone of the original object.
|
190
|
+
*/
|
191
|
+
|
192
|
+
|
193
|
+
var castCypressRunOptions = function castCypressRunOptions(opts) {
|
194
|
+
// only properties that have type "string | false" in our TS definition
|
195
|
+
// require special handling, because CLI parsing takes care of purely
|
196
|
+
// boolean arguments
|
197
|
+
var result = R.evolve({
|
198
|
+
port: coerceAnyStringToInt,
|
199
|
+
configFile: coerceFalse
|
200
|
+
})(opts);
|
201
|
+
return result;
|
202
|
+
};
|
203
|
+
|
158
204
|
module.exports = {
|
205
|
+
/**
|
206
|
+
* Parses `cypress run` command line option array into an object
|
207
|
+
* with options that you can feed into a `cypress.run()` module API call.
|
208
|
+
* @example
|
209
|
+
* const options = parseRunCommand(['cypress', 'run', '--browser', 'chrome'])
|
210
|
+
* // options is {browser: 'chrome'}
|
211
|
+
*/
|
212
|
+
parseRunCommand: function parseRunCommand(args) {
|
213
|
+
return new Promise(function (resolve, reject) {
|
214
|
+
if (!Array.isArray(args)) {
|
215
|
+
return reject(new Error('Expected array of arguments'));
|
216
|
+
} // make a copy of the input arguments array
|
217
|
+
// and add placeholders where "node ..." would usually be
|
218
|
+
// also remove "cypress" keyword at the start if present
|
219
|
+
|
220
|
+
|
221
|
+
var cliArgs = args[0] === 'cypress' ? _toConsumableArray(args.slice(1)) : _toConsumableArray(args);
|
222
|
+
cliArgs.unshift(null, null);
|
223
|
+
debug('creating program parser');
|
224
|
+
var program = createProgram();
|
225
|
+
addCypressRunCommand(program).action(function () {
|
226
|
+
for (var _len = arguments.length, fnArgs = new Array(_len), _key = 0; _key < _len; _key++) {
|
227
|
+
fnArgs[_key] = arguments[_key];
|
228
|
+
}
|
229
|
+
|
230
|
+
debug('parsed Cypress run %o', fnArgs);
|
231
|
+
var options = parseVariableOpts(fnArgs, cliArgs);
|
232
|
+
debug('parsed options %o', options);
|
233
|
+
var casted = castCypressRunOptions(options);
|
234
|
+
debug('casted options %o', casted);
|
235
|
+
resolve(casted);
|
236
|
+
});
|
237
|
+
debug('parsing args: %o', cliArgs);
|
238
|
+
program.parse(cliArgs);
|
239
|
+
});
|
240
|
+
},
|
241
|
+
|
242
|
+
/**
|
243
|
+
* Parses the command line and kicks off Cypress process.
|
244
|
+
*/
|
159
245
|
init: function init(args) {
|
160
246
|
if (!args) {
|
161
247
|
args = process.argv;
|
@@ -176,18 +262,14 @@ module.exports = {
|
|
176
262
|
logger.log();
|
177
263
|
}
|
178
264
|
|
179
|
-
var program =
|
180
|
-
// in usage help docs
|
181
|
-
|
182
|
-
program._name = 'cypress';
|
183
|
-
program.usage('<command> [options]');
|
265
|
+
var program = createProgram();
|
184
266
|
program.command('help').description('Shows CLI help and exits').action(function () {
|
185
267
|
program.help();
|
186
268
|
});
|
187
269
|
program.option('-v, --version', text('version')).command('version').description(text('version')).action(showVersions);
|
188
|
-
program
|
189
|
-
for (var
|
190
|
-
fnArgs[
|
270
|
+
addCypressRunCommand(program).action(function () {
|
271
|
+
for (var _len2 = arguments.length, fnArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
272
|
+
fnArgs[_key2] = arguments[_key2];
|
191
273
|
}
|
192
274
|
|
193
275
|
debug('running Cypress with args %o', fnArgs);
|
package/lib/cypress.js
CHANGED
@@ -13,6 +13,8 @@ var _run = require('./exec/run');
|
|
13
13
|
|
14
14
|
var util = require('./util');
|
15
15
|
|
16
|
+
var cli = require('./cli');
|
17
|
+
|
16
18
|
var cypressModuleApi = {
|
17
19
|
/**
|
18
20
|
* Opens Cypress GUI
|
@@ -53,6 +55,21 @@ var cypressModuleApi = {
|
|
53
55
|
});
|
54
56
|
});
|
55
57
|
});
|
58
|
+
},
|
59
|
+
cli: {
|
60
|
+
/**
|
61
|
+
* Parses CLI arguments into an object that you can pass to "cypress.run"
|
62
|
+
* @example
|
63
|
+
* const cypress = require('cypress')
|
64
|
+
* const cli = ['cypress', 'run', '--browser', 'firefox']
|
65
|
+
* const options = await cypress.cli.parseRunArguments(cli)
|
66
|
+
* // options is {browser: 'firefox'}
|
67
|
+
* await cypress.run(options)
|
68
|
+
* @see https://on.cypress.io/module-api
|
69
|
+
*/
|
70
|
+
parseRunArguments: function parseRunArguments(args) {
|
71
|
+
return cli.parseRunCommand(args);
|
72
|
+
}
|
56
73
|
}
|
57
74
|
};
|
58
75
|
module.exports = cypressModuleApi;
|
package/package.json
CHANGED
@@ -1,49 +1,49 @@
|
|
1
1
|
{
|
2
2
|
"name": "cypress",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.12.1",
|
4
4
|
"main": "index.js",
|
5
5
|
"scripts": {
|
6
6
|
"postinstall": "node index.js --exec install",
|
7
7
|
"size": "t=\"$(npm pack .)\"; wc -c \"${t}\"; tar tvf \"${t}\"; rm \"${t}\";"
|
8
8
|
},
|
9
9
|
"dependencies": {
|
10
|
-
"@cypress/listr-verbose-renderer": "0.4.1",
|
11
|
-
"@cypress/request": "2.88.5",
|
12
|
-
"@cypress/xvfb": "1.2.4",
|
13
|
-
"@types/sinonjs__fake-timers": "6.0.1",
|
14
|
-
"@types/sizzle": "2.3.2",
|
15
|
-
"arch": "2.1.2",
|
16
|
-
"bluebird": "3.7.2",
|
17
|
-
"cachedir": "2.3.0",
|
18
|
-
"chalk": "2.4.2",
|
19
|
-
"check-more-types": "2.24.0",
|
20
|
-
"cli-table3": "0.5.1",
|
21
|
-
"commander": "4.1.1",
|
22
|
-
"common-tags": "1.8.0",
|
23
|
-
"debug": "4.1.1",
|
24
|
-
"eventemitter2": "6.4.2",
|
25
|
-
"execa": "1.0.0",
|
26
|
-
"executable": "4.1.1",
|
27
|
-
"extract-zip": "1.7.0",
|
28
|
-
"fs-extra": "8.1.0",
|
29
|
-
"getos": "3.2.1",
|
30
|
-
"is-ci": "2.0.0",
|
31
|
-
"is-installed-globally": "0.3.2",
|
32
|
-
"lazy-ass": "1.6.0",
|
33
|
-
"listr": "0.14.3",
|
34
|
-
"lodash": "4.17.
|
35
|
-
"log-symbols": "3.0.0",
|
36
|
-
"minimist": "1.2.5",
|
37
|
-
"moment": "2.
|
38
|
-
"ospath": "1.2.2",
|
39
|
-
"pretty-bytes": "5.3.0",
|
40
|
-
"ramda": "0.26.1",
|
41
|
-
"request-progress": "3.0.0",
|
42
|
-
"supports-color": "7.1.0",
|
43
|
-
"tmp": "0.1.0",
|
44
|
-
"untildify": "4.0.0",
|
45
|
-
"url": "0.11.0",
|
46
|
-
"yauzl": "2.10.0"
|
10
|
+
"@cypress/listr-verbose-renderer": "^0.4.1",
|
11
|
+
"@cypress/request": "^2.88.5",
|
12
|
+
"@cypress/xvfb": "^1.2.4",
|
13
|
+
"@types/sinonjs__fake-timers": "^6.0.1",
|
14
|
+
"@types/sizzle": "^2.3.2",
|
15
|
+
"arch": "^2.1.2",
|
16
|
+
"bluebird": "^3.7.2",
|
17
|
+
"cachedir": "^2.3.0",
|
18
|
+
"chalk": "^2.4.2",
|
19
|
+
"check-more-types": "^2.24.0",
|
20
|
+
"cli-table3": "~0.5.1",
|
21
|
+
"commander": "^4.1.1",
|
22
|
+
"common-tags": "^1.8.0",
|
23
|
+
"debug": "^4.1.1",
|
24
|
+
"eventemitter2": "^6.4.2",
|
25
|
+
"execa": "^1.0.0",
|
26
|
+
"executable": "^4.1.1",
|
27
|
+
"extract-zip": "^1.7.0",
|
28
|
+
"fs-extra": "^8.1.0",
|
29
|
+
"getos": "^3.2.1",
|
30
|
+
"is-ci": "^2.0.0",
|
31
|
+
"is-installed-globally": "^0.3.2",
|
32
|
+
"lazy-ass": "^1.6.0",
|
33
|
+
"listr": "^0.14.3",
|
34
|
+
"lodash": "^4.17.19",
|
35
|
+
"log-symbols": "^3.0.0",
|
36
|
+
"minimist": "^1.2.5",
|
37
|
+
"moment": "^2.27.0",
|
38
|
+
"ospath": "^1.2.2",
|
39
|
+
"pretty-bytes": "^5.3.0",
|
40
|
+
"ramda": "~0.26.1",
|
41
|
+
"request-progress": "^3.0.0",
|
42
|
+
"supports-color": "^7.1.0",
|
43
|
+
"tmp": "~0.1.0",
|
44
|
+
"untildify": "^4.0.0",
|
45
|
+
"url": "^0.11.0",
|
46
|
+
"yauzl": "^2.10.0"
|
47
47
|
},
|
48
48
|
"files": [
|
49
49
|
"bin",
|
@@ -6,7 +6,7 @@
|
|
6
6
|
// in the future the NPM module itself will be in TypeScript
|
7
7
|
// but for now describe it as an ambient module
|
8
8
|
|
9
|
-
declare
|
9
|
+
declare namespace CypressCommandLine {
|
10
10
|
/**
|
11
11
|
* All options that one can pass to "cypress.run"
|
12
12
|
* @see https://on.cypress.io/module-api#cypress-run
|
@@ -306,6 +306,27 @@ declare module 'cypress' {
|
|
306
306
|
message: string
|
307
307
|
}
|
308
308
|
|
309
|
+
/**
|
310
|
+
* Methods allow parsing given CLI arguments the same way Cypress CLI does it.
|
311
|
+
*/
|
312
|
+
interface CypressCliParser {
|
313
|
+
/**
|
314
|
+
* Parses the given array of string arguments to "cypress run"
|
315
|
+
* just like Cypress CLI does it.
|
316
|
+
* @see https://on.cypress.io/module-api
|
317
|
+
* @example
|
318
|
+
* const cypress = require('cypress')
|
319
|
+
* const args = ['cypress', 'run', '--browser', 'chrome']
|
320
|
+
* const options = await cypress.cli.parseRunArguments(args)
|
321
|
+
* // options is {browser: 'chrome'}
|
322
|
+
* // pass the options to cypress.run()
|
323
|
+
* const results = await cypress.run(options)
|
324
|
+
*/
|
325
|
+
parseRunArguments(args: string[]): Promise<Partial<CypressRunOptions>>
|
326
|
+
}
|
327
|
+
}
|
328
|
+
|
329
|
+
declare module 'cypress' {
|
309
330
|
/**
|
310
331
|
* Cypress NPM module interface.
|
311
332
|
* @see https://on.cypress.io/module-api
|
@@ -330,13 +351,19 @@ declare module 'cypress' {
|
|
330
351
|
})
|
331
352
|
```
|
332
353
|
*/
|
333
|
-
run(options?: Partial<CypressRunOptions>): Promise<CypressRunResult | CypressFailedRunResult>,
|
354
|
+
run(options?: Partial<CypressCommandLine.CypressRunOptions>): Promise<CypressCommandLine.CypressRunResult | CypressCommandLine.CypressFailedRunResult>,
|
334
355
|
/**
|
335
356
|
* Opens Cypress GUI. Resolves with void when the
|
336
357
|
* GUI is closed.
|
337
358
|
* @see https://on.cypress.io/module-api#cypress-open
|
338
359
|
*/
|
339
|
-
open(options?: Partial<CypressOpenOptions>): Promise<void>
|
360
|
+
open(options?: Partial<CypressCommandLine.CypressOpenOptions>): Promise<void>
|
361
|
+
|
362
|
+
/**
|
363
|
+
* Utility functions for parsing CLI arguments the same way
|
364
|
+
* Cypress does
|
365
|
+
*/
|
366
|
+
cli: CypressCommandLine.CypressCliParser
|
340
367
|
}
|
341
368
|
|
342
369
|
// export Cypress NPM module interface
|