scripts/test-functional.js (57 lines of code) (raw):

#!/usr/bin/env node import path from 'path'; import shell from 'shelljs'; import tmp from 'tmp'; import { mochaFunctional } from './lib/mocha.js'; const pkg = JSON.parse(shell.cat('package.json')); shell.set('-e'); const packageFileName = `${pkg.name}-${pkg.version}.tgz`; const testProductionMode = process.env.TEST_PRODUCTION_MODE === '1'; const testLegacyBundling = process.env.TEST_LEGACY_BUNDLING === '1'; let execMochaOptions = {}; shell.exec( 'npm run build', testProductionMode ? { env: { ...process.env, NODE_ENV: 'production', }, } : {}, ); if (testProductionMode) { const srcDir = process.cwd(); const destDir = tmp.tmpNameSync(); const packageDir = tmp.tmpNameSync(); const npmInstallOptions = ['--production']; if (testLegacyBundling) { shell.echo('\nTest in "npm legacy bundling mode"'); npmInstallOptions.push('--legacy-bundling'); } execMochaOptions = { env: { ...process.env, TEST_WEB_EXT_BIN: path.join( destDir, 'node_modules', 'web-ext', 'bin', 'web-ext', ), }, }; shell.echo('\nPreparing web-ext production mode environment...\n'); shell.rm('-rf', destDir, packageDir); shell.mkdir('-p', destDir, packageDir); shell.pushd(packageDir); shell.exec(`npm pack ${srcDir}`); shell.popd(); shell.pushd(destDir); const pkgPath = path.join(packageDir, packageFileName); shell.exec(`npm install ${npmInstallOptions.join(' ')} ${pkgPath}`); shell.popd(); shell.echo('\nProduction mode environment successfully created.\n'); } let ok = mochaFunctional(execMochaOptions); // Try to re-run the functional tests once more if they fails on a CI windows worker (#1510). if (!ok && process.env.CI_RETRY_ONCE) { console.log( '*** Functional tests failure on a CI window worker, trying to re-run once more...', ); ok = mochaFunctional(execMochaOptions); } process.exit(ok ? 0 : 1);