aboutsummaryrefslogtreecommitdiffstats
path: root/tests/runner/command.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/runner/command.js')
-rw-r--r--tests/runner/command.js86
1 files changed, 74 insertions, 12 deletions
diff --git a/tests/runner/command.js b/tests/runner/command.js
index 655024fb4..cf5ddd8ee 100644
--- a/tests/runner/command.js
+++ b/tests/runner/command.js
@@ -1,8 +1,10 @@
import yargs from "yargs/yargs";
-import { browsers } from "./browsers.js";
-import { suites } from "./suites.js";
+import { browsers } from "./flags/browsers.js";
+import { getPlan, listBrowsers, stopWorkers } from "./browserstack/api.js";
+import { buildBrowserFromString } from "./browserstack/buildBrowserFromString.js";
+import { jquery } from "./flags/jquery.js";
+import { suites } from "./flags/suites.js";
import { run } from "./run.js";
-import { jquery } from "./jquery.js";
const argv = yargs( process.argv.slice( 2 ) )
.version( false )
@@ -40,16 +42,25 @@ const argv = yargs( process.argv.slice( 2 ) )
type: "array",
choices: browsers,
description:
- "Run tests in a specific browser.\n" +
- "Pass multiple browsers by repeating the option.",
+ "Run tests in a specific browser." +
+ "Pass multiple browsers by repeating the option." +
+ "If using BrowserStack, specify browsers using --browserstack.",
default: [ "chrome" ]
} )
.option( "headless", {
alias: "h",
type: "boolean",
description:
- "Run tests in headless mode. Cannot be used with --debug.",
- conflicts: [ "debug" ]
+ "Run tests in headless mode. Cannot be used with --debug or --browserstack.",
+ conflicts: [ "debug", "browserstack" ]
+ } )
+ .option( "concurrency", {
+ alias: "c",
+ type: "number",
+ description:
+ "Run tests in parallel in multiple browsers. " +
+ "Defaults to 8 in normal mode. In browserstack mode, " +
+ "defaults to the maximum available under your BrowserStack plan."
} )
.option( "debug", {
alias: "d",
@@ -61,18 +72,69 @@ const argv = yargs( process.argv.slice( 2 ) )
.option( "retries", {
alias: "r",
type: "number",
- description: "Number of times to retry failed tests."
+ description: "Number of times to retry failed tests by refreshing the URL."
} )
- .option( "concurrency", {
- alias: "c",
+ .option( "hard-retries", {
type: "number",
- description: "Run tests in parallel in multiple browsers. Defaults to 8."
+ description:
+ "Number of times to retry failed tests by restarting the worker. " +
+ "This is in addition to the normal retries " +
+ "and are only used when the normal retries are exhausted."
} )
.option( "verbose", {
alias: "v",
type: "boolean",
description: "Log additional information."
} )
+ .option( "browserstack", {
+ type: "array",
+ description:
+ "Run tests in BrowserStack.\n" +
+ "Requires BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY environment variables.\n" +
+ "The value can be empty for the default configuration, or a string in the format of\n" +
+ "\"browser_[browserVersion | :device]_os_osVersion\" (see --list-browsers).\n" +
+ "Pass multiple browsers by repeating the option.\n" +
+ "The --browser option is ignored when --browserstack has a value.\n" +
+ "Otherwise, the --browser option will be used, " +
+ "with the latest version/device for that browser, on a matching OS."
+ } )
+ .option( "run-id", {
+ type: "string",
+ description: "A unique identifier for the run in BrowserStack."
+ } )
+ .option( "list-browsers", {
+ type: "string",
+ description:
+ "List available BrowserStack browsers and exit.\n" +
+ "Leave blank to view all browsers or pass " +
+ "\"browser_[browserVersion | :device]_os_osVersion\" with each parameter " +
+ "separated by an underscore to filter the list (any can be omitted).\n" +
+ "\"latest\" can be used in place of \"browserVersion\" to find the latest version.\n" +
+ "\"latest-n\" can be used to find the nth latest browser version.\n" +
+ "Use a colon to indicate a device.\n" +
+ "Examples: \"chrome__windows_10\", \"safari_latest\", " +
+ "\"Mobile Safari\", \"Android Browser_:Google Pixel 8 Pro\".\n" +
+ "Use quotes if spaces are necessary."
+ } )
+ .option( "stop-workers", {
+ type: "boolean",
+ description:
+ "WARNING: This will stop all BrowserStack workers that may exist and exit," +
+ "including any workers running from other projects.\n" +
+ "This can be used as a failsafe when there are too many stray workers."
+ } )
+ .option( "browserstack-plan", {
+ type: "boolean",
+ description: "Show BrowserStack plan information and exit."
+ } )
.help().argv;
-run( argv );
+if ( typeof argv.listBrowsers === "string" ) {
+ listBrowsers( buildBrowserFromString( argv.listBrowsers ) );
+} else if ( argv.stopWorkers ) {
+ stopWorkers();
+} else if ( argv.browserstackPlan ) {
+ console.log( await getPlan() );
+} else {
+ run( argv );
+}