testplane
Version:
Tests framework based on mocha and wdio
133 lines • 6.29 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = void 0;
const node_path_1 = __importDefault(require("node:path"));
const commander_1 = require("@gemini-testing/commander");
const defaults_1 = __importDefault(require("../config/defaults"));
const info_1 = require("./info");
const testplane_1 = require("../testplane");
const package_json_1 = __importDefault(require("../../package.json"));
const logger = __importStar(require("../utils/logger"));
const errors_1 = require("../utils/errors");
const secret_replacer_1 = require("../utils/secret-replacer");
const cli_1 = require("../utils/cli");
const constants_1 = require("./constants");
let testplane;
process.on("uncaughtException", err => {
logger.error((0, secret_replacer_1.utilInspectSafe)(err));
process.exit(1);
});
process.on("unhandledRejection", (reason, p) => {
if ((0, errors_1.shouldIgnoreUnhandledRejection)(reason)) {
logger.warn(`Unhandled Rejection "${reason}" in testplane:master:${process.pid} was ignored`);
return;
}
const error = [
`Unhandled Rejection in testplane:master:${process.pid}:`,
`Promise: ${(0, secret_replacer_1.utilInspectSafe)(p)}`,
`Reason: ${(0, secret_replacer_1.utilInspectSafe)(reason)}`,
].join("\n");
if (testplane) {
testplane.halt(new Error(error));
}
else {
logger.error(error);
process.exit(1);
}
});
const run = async (opts = {}) => {
const program = new commander_1.Command(opts.cliName || "testplane");
program.version(package_json_1.default.version).allowUnknownOption().option("-c, --config <path>", "path to configuration file");
const programToParseRequires = new commander_1.Command(opts.cliName || "testplane")
.version(package_json_1.default.version)
.allowUnknownOption()
.option("-r, --require <module>", "require module", cli_1.collectCliValues);
const requireModules = preparseOption(programToParseRequires, "require");
if (requireModules) {
await (0, cli_1.handleRequires)(requireModules);
}
const configPath = preparseOption(program, "config");
testplane = testplane_1.Testplane.create(configPath);
(0, cli_1.withCommonCliOptions)({ cmd: program, actionName: "run" })
.on("--help", () => console.log((0, info_1.configOverriding)(opts)))
.description("Run tests")
.option("--reporter <name>", "test reporters", cli_1.collectCliValues)
.option("--update-refs", 'update screenshot references or gather them if they do not exist ("assertView" command)')
.option("--inspect [inspect]", "nodejs inspector on [=[host:]port]")
.option("--inspect-brk [inspect-brk]", "nodejs inspector with break at the start")
.option("--repl [type]", "run one test, call `browser.switchToRepl` in test code to open repl interface", Boolean, false)
.option("--repl-before-test [type]", "open repl interface before test run", Boolean, false)
.option("--repl-on-fail [type]", "open repl interface on test fail only", Boolean, false)
.option("--devtools", "switches the browser to the devtools mode with using CDP protocol")
.option("--local", "use local browsers, managed by testplane (same as 'gridUrl': 'local')")
.arguments("[paths...]")
.action(async (paths) => {
try {
const { reporter: reporters, browser: browsers, set: sets, grep, updateRefs, inspect, inspectBrk, repl, replBeforeTest, replOnFail, devtools, local, } = program;
const isTestsSuccess = await testplane.run(paths, {
reporters: reporters || defaults_1.default.reporters,
browsers,
sets,
grep,
updateRefs,
requireModules,
inspectMode: (inspect || inspectBrk) && { inspect, inspectBrk },
replMode: {
enabled: repl || replBeforeTest || replOnFail,
beforeTest: replBeforeTest,
onFail: replOnFail,
},
devtools: devtools || false,
local: local || false,
});
process.exit(isTestsSuccess ? 0 : 1);
}
catch (err) {
logger.error(err.stack || err);
process.exit(1);
}
});
for (const commandName of Object.values(constants_1.CliCommands)) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { registerCmd } = require(node_path_1.default.resolve(__dirname, "./commands", commandName));
registerCmd(program, testplane);
}
testplane.extendCli(program);
program.parse(process.argv);
};
exports.run = run;
function preparseOption(program, option) {
// do not display any help, do not exit
const configFileParser = Object.create(program);
configFileParser.options = [].concat(program.options);
configFileParser.option("-h, --help");
configFileParser.parse(process.argv);
return configFileParser[option];
}
//# sourceMappingURL=index.js.map