2020-04-02 13:41:06 +00:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
|
|
|
const { spawnSync } = require( 'child_process' );
|
|
|
|
const program = require( 'commander' );
|
|
|
|
const path = require( 'path' );
|
|
|
|
const fs = require( 'fs' );
|
2020-07-29 18:13:22 +00:00
|
|
|
const { getAppRoot } = require( '../utils' );
|
2021-03-08 20:56:47 +00:00
|
|
|
const { WC_E2E_SCREENSHOTS, JEST_PUPPETEER_CONFIG } = process.env;
|
2020-04-02 13:41:06 +00:00
|
|
|
|
|
|
|
program
|
|
|
|
.usage( '<file ...> [options]' )
|
|
|
|
.option( '--dev', 'Development mode' )
|
2020-10-09 08:00:03 +00:00
|
|
|
.option( '--debug', 'Debug mode' )
|
2020-04-02 13:41:06 +00:00
|
|
|
.parse( process.argv );
|
|
|
|
|
2020-07-29 18:13:22 +00:00
|
|
|
const appPath = getAppRoot();
|
2020-04-15 17:07:32 +00:00
|
|
|
|
2021-03-08 19:07:29 +00:00
|
|
|
// clear the screenshots folder before running tests.
|
2021-03-08 20:56:47 +00:00
|
|
|
if ( WC_E2E_SCREENSHOTS ) {
|
|
|
|
const screenshotPath = path.resolve(appPath, 'tests/e2e/screenshots');
|
|
|
|
if (fs.existsSync(screenshotPath)) {
|
|
|
|
fs.readdirSync(screenshotPath).forEach((file, index) => {
|
|
|
|
const filename = path.join(screenshotPath, file);
|
|
|
|
fs.unlinkSync(filename);
|
|
|
|
});
|
|
|
|
}
|
2021-03-08 19:07:29 +00:00
|
|
|
}
|
|
|
|
|
2020-04-15 17:07:32 +00:00
|
|
|
const nodeConfigDirs = [
|
|
|
|
path.resolve( __dirname, '../config' ),
|
|
|
|
];
|
|
|
|
|
|
|
|
if ( appPath ) {
|
|
|
|
nodeConfigDirs.unshift(
|
2020-04-28 20:14:11 +00:00
|
|
|
path.resolve( appPath, 'tests/e2e/config' )
|
2020-04-15 17:07:32 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-07-28 19:23:32 +00:00
|
|
|
let testEnvVars = {
|
2020-04-29 14:22:11 +00:00
|
|
|
NODE_ENV: 'test-e2e',
|
2020-04-15 17:07:32 +00:00
|
|
|
NODE_CONFIG_DIR: nodeConfigDirs.join( ':' ),
|
2020-05-04 17:37:25 +00:00
|
|
|
node_config_dev: program.dev ? 'yes' : 'no',
|
2020-05-05 16:56:00 +00:00
|
|
|
jest_test_timeout: program.dev ? 120000 : 30000,
|
2020-04-02 13:41:06 +00:00
|
|
|
};
|
2020-07-29 18:13:22 +00:00
|
|
|
|
2020-07-28 19:23:32 +00:00
|
|
|
if ( ! JEST_PUPPETEER_CONFIG ) {
|
2020-07-29 18:13:22 +00:00
|
|
|
// Use local Puppeteer config if there is one.
|
|
|
|
// Load test configuration file into an object.
|
|
|
|
const localJestConfigFile = path.resolve( appPath, 'tests/e2e/config/jest-puppeteer.config.js' );
|
|
|
|
const jestConfigFile = path.resolve( __dirname, '../config/jest-puppeteer.config.js' );
|
|
|
|
|
|
|
|
testEnvVars.JEST_PUPPETEER_CONFIG = fs.existsSync( localJestConfigFile ) ? localJestConfigFile : jestConfigFile;
|
2020-07-28 19:23:32 +00:00
|
|
|
}
|
2020-04-02 13:41:06 +00:00
|
|
|
|
2020-10-01 18:56:02 +00:00
|
|
|
// Check for running a specific script
|
|
|
|
if ( program.args.length == 1 ) {
|
|
|
|
// Check for both absolute and relative paths
|
2020-10-20 14:25:36 +00:00
|
|
|
const testSpecAbs = path.resolve( program.args[0] );
|
2020-10-01 18:56:02 +00:00
|
|
|
const testSpecRel = path.resolve( appPath, program.args[0] );
|
|
|
|
if ( fs.existsSync( testSpecAbs ) ) {
|
|
|
|
process.env.jest_test_spec = testSpecAbs;
|
|
|
|
} else if ( fs.existsSync( testSpecRel ) ) {
|
|
|
|
process.env.jest_test_spec = testSpecRel;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-02 13:41:06 +00:00
|
|
|
let jestCommand = 'jest';
|
|
|
|
const jestArgs = [
|
|
|
|
'--maxWorkers=1',
|
|
|
|
'--rootDir=./',
|
|
|
|
'--verbose',
|
|
|
|
...program.args,
|
|
|
|
];
|
|
|
|
|
2020-10-09 08:00:03 +00:00
|
|
|
if ( program.debug ) {
|
2020-04-02 13:41:06 +00:00
|
|
|
jestCommand = 'npx';
|
|
|
|
jestArgs.unshift( 'ndb', 'jest' );
|
|
|
|
}
|
|
|
|
|
|
|
|
const envVars = Object.assign( {}, process.env, testEnvVars );
|
|
|
|
|
|
|
|
let configPath = path.resolve( __dirname, '../config/jest.config.js' );
|
|
|
|
|
|
|
|
// Look for a Jest config in the dependent app's path.
|
|
|
|
if ( appPath ) {
|
2020-04-28 20:14:11 +00:00
|
|
|
const appConfig = path.resolve( appPath, 'tests/e2e/config/jest.config.js' );
|
2020-04-02 13:41:06 +00:00
|
|
|
|
|
|
|
if ( fs.existsSync( appConfig ) ) {
|
|
|
|
configPath = appConfig;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
jestArgs.push( '--config=' + configPath );
|
|
|
|
|
|
|
|
const jestProcess = spawnSync(
|
|
|
|
jestCommand,
|
|
|
|
jestArgs,
|
|
|
|
{
|
|
|
|
stdio: 'inherit',
|
|
|
|
env: envVars,
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
console.log( 'Jest exit code: ' + jestProcess.status );
|
|
|
|
|
|
|
|
// Pass Jest exit code to npm
|
|
|
|
process.exit( jestProcess.status );
|