diff options
author | Paul Gascou-Vaillancourt <paul.gascvail@gmail.com> | 2019-04-10 22:55:11 +0300 |
---|---|---|
committer | Paul Slaughter <pslaughter@gitlab.com> | 2019-05-13 17:48:34 +0300 |
commit | 88b02af305a1d279827235e13f8c58940eca9fb5 (patch) | |
tree | 74687c9b6016b2d80ec4003aa844a19639ac6690 /scripts/frontend | |
parent | 26ee5c0599936e4f8660aa2f37c01e601098e38e (diff) |
Create a unified script to run Jest & Karma tests
- Created scripts/frontend/test.js
- Updated test task to call Node script
Diffstat (limited to 'scripts/frontend')
-rw-r--r-- | scripts/frontend/test.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/scripts/frontend/test.js b/scripts/frontend/test.js new file mode 100644 index 00000000000..3dff781844e --- /dev/null +++ b/scripts/frontend/test.js @@ -0,0 +1,77 @@ +#!/usr/bin/env node + +const program = require('commander'); +const { spawn } = require('child_process'); + +const JEST_ROUTE = 'spec/frontend'; +const KARMA_ROUTE = 'spec/javascripts'; +const COMMON_ARGS = ['--colors']; + +program + .version('0.1.0') + .usage('[options] <file ...>') + .option('-p, --parallel', 'Run tests suites in parallel') + .parse(process.argv); + +const runTests = paths => { + if (program.parallel) { + return Promise.all([runJest(paths), runKarma(paths)]); + } else { + return runJest(paths).then(() => runKarma(paths)); + } +}; + +const spawnPromise = (cmd, args) => { + return new Promise((resolve, reject) => { + const proc = spawn('yarn', ['run', cmd, ...args]); + const output = data => `${cmd}: ${data}`; + + proc.stdout.on('data', data => { + process.stdout.write(output(data)); + }); + + proc.stderr.on('data', data => { + process.stderr.write(output(data)); + }); + + proc.on('close', code => { + process.stdout.write(`${cmd} exited with code ${code}`); + if (code === 0) { + resolve(); + } else { + reject(); + } + }); + }); +}; + +const runJest = args => { + return spawnPromise('jest', [...COMMON_ARGS, ...toJestArgs(args)]); +}; + +const runKarma = args => { + return spawnPromise('karma', [...COMMON_ARGS, ...toKarmaArgs(args)]); +}; + +const replacePath = to => path => + path + .replace(JEST_ROUTE, to) + .replace(KARMA_ROUTE, to) + .replace('app/assets/javascripts', to); + +const toJestArgs = paths => paths.map(replacePath(JEST_ROUTE)); + +const toKarmaArgs = paths => + paths.map(replacePath(KARMA_ROUTE)).reduce((acc, current) => acc.concat('-f', current), []); + +const main = paths => { + runTests(paths) + .then(() => { + console.log('All tests passed!'); + }) + .catch(() => { + console.log('Some tests failed...'); + }); +}; + +main(program.args); |