From 189b9081ca77f10eafb9cfa52744fd10bf4fa856 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Thu, 27 Aug 2020 15:31:01 +0200 Subject: [PATCH] feat: add script reporting more errors --- curriculum/package-lock.json | 52 ++++++++++++++++++++++++++++++ curriculum/package.json | 5 ++- curriculum/test/test-challenges.js | 24 +++++++------- 3 files changed, 69 insertions(+), 12 deletions(-) diff --git a/curriculum/package-lock.json b/curriculum/package-lock.json index 5048ce2846..8a0ecbc3b5 100644 --- a/curriculum/package-lock.json +++ b/curriculum/package-lock.json @@ -5050,6 +5050,58 @@ } } }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", diff --git a/curriculum/package.json b/curriculum/package.json index 259a7b2800..85c1d7de5b 100644 --- a/curriculum/package.json +++ b/curriculum/package.json @@ -18,7 +18,9 @@ "lint": "gulp lint", "semantic-release": "semantic-release", "pretest": "cd ../client && npm run build:workers", - "test": "mocha --delay --reporter progress --bail" + "pretest:full-output": "npm run pretest", + "test": "mocha --delay --reporter progress --bail", + "test:full-output": "cross-env FULL_OUTPUT=true mocha --delay --reporter progress" }, "dependencies": { "invariant": "^2.2.4" @@ -44,6 +46,7 @@ "babel-preset-stage-3": "^6.24.1", "babel-standalone": "^6.26.0", "chai": "4.2.0", + "cross-env": "^7.0.2", "fs-extra": "^6.0.1", "gulp": "^4.0.2", "joi": "^13.3.0", diff --git a/curriculum/test/test-challenges.js b/curriculum/test/test-challenges.js index 6ee07f5c6e..3fc42cb513 100644 --- a/curriculum/test/test-challenges.js +++ b/curriculum/test/test-challenges.js @@ -55,13 +55,21 @@ const { createPoly } = require('../../utils/polyvinyl'); const testEvaluator = require('../../client/config/test-evaluator').filename; // rethrow unhandled rejections to make sure the tests exit with -1 -process.on('unhandledRejection', err => { - cleanup(); +process.on('unhandledRejection', err => handleRejection(err)); + +const handleRejection = err => { // setting the error code because node does not (yet) exit with a non-zero // code on unhandled exceptions. process.exitCode = 1; - throw err; -}); + cleanup(); + if (process.env.FULL_OUTPUT === 'true') { + // some errors *may* not be reported, since cleanup is triggered by the + // first error and that starts shutting down the browser and the server. + console.error(err); + } else { + throw err; + } +}; const dom = new jsdom.JSDOM(''); global.document = dom.window.document; @@ -97,13 +105,7 @@ let page; setup() .then(runTests) - .catch(err => { - cleanup(); - // setting the error code because node does not (yet) exit with a non-zero - // code on unhandled exceptions. - process.exitCode = 1; - throw err; - }); + .catch(err => handleRejection(err)); async function setup() { if (process.env.npm_config_superblock && process.env.npm_config_block) {