diff --git a/.circleci/config.yml b/.circleci/config.yml index 13c0b6e16b39..c1a80dd1b8a9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1193,7 +1193,7 @@ steps-test-node: &steps-test-node name: Run Node Tests command: | cd src - node electron/script/node-spec-runner.js junit + node electron/script/node-spec-runner.js --default --jUnitDir=junit - store_test_results: path: src/junit diff --git a/script/node-spec-runner.js b/script/node-spec-runner.js index 0c4ceb1867b3..487038b4513d 100644 --- a/script/node-spec-runner.js +++ b/script/node-spec-runner.js @@ -2,10 +2,16 @@ const cp = require('child_process') const fs = require('fs') const path = require('path') +const args = require('minimist')(process.argv.slice(2), { + boolean: ['default'], + string: ['jUnitDir'] +}) + const BASE = path.resolve(__dirname, '../..') +const DISABLED_TESTS = require('./node-disabled-tests.json') const NODE_DIR = path.resolve(BASE, 'third_party', 'electron_node') const NPX_CMD = process.platform === 'win32' ? 'npx.cmd' : 'npx' -const JUNIT_DIR = process.argv[2] ? path.resolve(process.argv[2]) : null +const JUNIT_DIR = args.jUnitDir ? path.resolve(args.jUnitDir) : null const TAP_FILE_NAME = 'test.tap' const utils = require('./lib/utils') @@ -15,10 +21,43 @@ if (!process.mainModule) { throw new Error('Must call the node spec runner directly') } -async function main () { - const DISABLED_TESTS = require('./node-disabled-tests.json') +const defaultOptions = [ + 'tools/test.py', + '-p', + 'tap', + '--logfile', + TAP_FILE_NAME, + '--mode=debug', + 'default', + `--skip-tests=${DISABLED_TESTS.join(',')}`, + '--shell', + utils.getAbsoluteElectronExec(), + '-J' +] - const testChild = cp.spawn('python', ['tools/test.py', '--verbose', '-p', 'tap', '--logfile', TAP_FILE_NAME, '--mode=debug', 'default', `--skip-tests=${DISABLED_TESTS.join(',')}`, '--shell', utils.getAbsoluteElectronExec(), '-J'], { +const getCustomOptions = () => { + let customOptions = ['tools/test.py'] + + // Add all custom arguments. + const extra = process.argv.slice(2) + if (extra) { + customOptions = customOptions.concat(extra) + } + + // We need this unilaterally or Node.js will try + // to run from out/Release/node. + customOptions = customOptions.concat([ + '--shell', + utils.getAbsoluteElectronExec() + ]) + + return customOptions +} + +async function main () { + const options = args.default ? defaultOptions : getCustomOptions() + + const testChild = cp.spawn('python', options, { env: { ...process.env, ELECTRON_RUN_AS_NODE: 'true',