scripts/lib/mocha.js (36 lines of code) (raw):

import { spawnSync } from 'child_process'; import shell from 'shelljs'; import config from './config.js'; // Get the explicit path (needed on CI windows workers). function which(...args) { return String(shell.which(...args)); } const runMocha = (args, execMochaOptions = {}, coverageEnabled) => { const mochaPath = which('mocha'); const binArgs = coverageEnabled ? [mochaPath, ...args] : args; const binPath = coverageEnabled ? which('nyc') : mochaPath; if (process.env.MOCHA_TIMEOUT) { const { MOCHA_TIMEOUT } = process.env; binArgs.push('--timeout', MOCHA_TIMEOUT); shell.echo(`\nSetting mocha timeout from env var: ${MOCHA_TIMEOUT}\n`); } // Pass testdouble node loader to support ESM module mocking and // transpiling on the fly the tests modules. binArgs.push('-n="loader=testdouble"'); const res = spawnSync(binPath, binArgs, { ...execMochaOptions, env: { ...process.env, // Make sure NODE_ENV is set to test (which also enable babel // install plugin for all modules transpiled on the fly). NODE_ENV: 'test', }, stdio: 'inherit', }); if (res.error) { console.error(res.error); return false; } return res.status === 0; }; export const mochaUnit = (execMochaOptions, coverageEnabled) => { return runMocha(config.mocha.unit, execMochaOptions, coverageEnabled); }; export const mochaFunctional = (execMochaOptions) => { return runMocha(config.mocha.functional, execMochaOptions); };