woocommerce/packages/js/e2e-environment/bin/e2e-test-integration.js

116 lines
2.9 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
const { spawnSync } = require( 'child_process' );
const program = require( 'commander' );
const path = require( 'path' );
const fs = require( 'fs' );
const {
getAppRoot,
resolveLocalE2ePath,
resolvePackagePath,
} = require( '../utils' );
const {
WC_E2E_SCREENSHOTS,
JEST_PUPPETEER_CONFIG,
DEFAULT_TIMEOUT_OVERRIDE,
} = process.env;
program
.usage( '<file ...> [options]' )
.option( '--dev', 'Development mode' )
2020-10-09 08:00:03 +00:00
.option( '--debug', 'Debug mode' )
.parse( process.argv );
2020-07-29 18:13:22 +00:00
const appPath = getAppRoot();
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 = resolveLocalE2ePath( 'screenshots' );
if ( fs.existsSync( screenshotPath ) ) {
fs.readdirSync( screenshotPath ).forEach( ( file, index ) => {
const filename = path.join( screenshotPath, file );
fs.unlinkSync( filename );
} );
2021-03-08 20:56:47 +00:00
}
2021-03-08 19:07:29 +00:00
}
const nodeConfigDirs = [ resolvePackagePath( 'config' ) ];
if ( appPath ) {
nodeConfigDirs.unshift( resolveLocalE2ePath( 'config' ) );
}
const testEnvVars = {
NODE_ENV: 'test-e2e',
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-07-29 18:13:22 +00:00
2021-08-12 22:05:55 +00:00
if ( DEFAULT_TIMEOUT_OVERRIDE ) {
testEnvVars.jest_test_timeout = DEFAULT_TIMEOUT_OVERRIDE;
}
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 = resolveLocalE2ePath( 'config/jest-puppeteer.config.js' );
const jestConfigFile = resolvePackagePath( 'config/jest-puppeteer.config.js' );
2020-07-29 18:13:22 +00:00
testEnvVars.JEST_PUPPETEER_CONFIG = fs.existsSync( localJestConfigFile )
? localJestConfigFile
: jestConfigFile;
2020-07-28 19:23:32 +00:00
}
// Check for running a specific script
if ( program.args.length == 1 ) {
// Check for both absolute and relative paths
const testSpecAbs = path.resolve( program.args[ 0 ] );
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;
}
}
let jestCommand = 'jest';
const jestArgs = [
'--maxWorkers=1',
'--rootDir=./',
'--verbose',
2021-12-08 17:47:50 +00:00
'--json',
'--outputFile=test-results.json',
...program.args,
];
2020-10-09 08:00:03 +00:00
if ( program.debug ) {
jestCommand = 'npx';
jestArgs.unshift( 'ndb', 'jest' );
}
const envVars = Object.assign( {}, process.env, testEnvVars );
let configPath = resolvePackagePath( 'config/jest.config.js' );
// Look for a Jest config in the dependent app's path.
if ( appPath ) {
const appConfig = resolveLocalE2ePath( 'config/jest.config.js' );
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 );