diff --git a/web/cashtab/package.json b/web/cashtab/package.json --- a/web/cashtab/package.json +++ b/web/cashtab/package.json @@ -109,7 +109,7 @@ "extension": "./scripts/extension.sh", "predeploy": "npm run build", "test": "node scripts/test.js", - "test:coverage": "npm run test --coverage --watchAll=false", + "test:coverage": "CI=true npm run test --coverage", "debug": "node --inspect-brk=9229 scripts/start.js" }, "eslintConfig": { @@ -146,7 +146,9 @@ "setupFiles": [ "react-app-polyfill/jsdom" ], - "setupFilesAfterEnv": [], + "setupFilesAfterEnv": [ + "/scripts/testSetup.js" + ], "testMatch": [ "/src/**/__tests__/**/*.{js,jsx,ts,tsx}", "/src/**/*.{spec,test}.{js,jsx,ts,tsx}" diff --git a/web/cashtab/scripts/testSetup.js b/web/cashtab/scripts/testSetup.js new file mode 100644 --- /dev/null +++ b/web/cashtab/scripts/testSetup.js @@ -0,0 +1,58 @@ +const util = require('util'); + +jasmine.getEnv().addReporter({ + specStarted: result => (jasmine.currentTest = result), + specDone: result => (jasmine.currentTest = result), +}); + +let consoleMessageBackup = []; + +function moveConsoleMessagesToBackup(text, logger) { + try { + throw new Error('Getting Stack Trace from previous Error'); + } catch (err) { + let trace = err.stack.split('\n'); + trace.shift(); // removes Error: stacktrace + trace.shift(); // removes moveConsoleMessagesToBackup() call from the "throw" command + trace.shift(); // removes console logger call in the console override + consoleMessageBackup.push({ + logger: logger, + payload: text, + stacktrace: trace.join('\n'), + }); + } +} + +const orig = console; +global.console = { + ...console, + log: text => moveConsoleMessagesToBackup(text, orig.log), + error: text => moveConsoleMessagesToBackup(text, orig.error), + warn: text => moveConsoleMessagesToBackup(text, orig.warn), + info: text => moveConsoleMessagesToBackup(text, orig.info), + debug: text => moveConsoleMessagesToBackup(text, orig.debug), +}; + +global.afterEach(() => { + let isFailedTest = true; + if ( + jasmine && + jasmine.currentTest && + Array.isArray(jasmine.currentTest.failedExpectations) + ) { + isFailedTest = jasmine.currentTest.failedExpectations.length > 0; + } + + if (isFailedTest) { + consoleMessageBackup.forEach(msg => { + if ( + typeof msg.payload === 'object' || + typeof msg.payload === 'function' + ) { + msg.payload = util.inspect(msg.payload, false, null, true); + } + msg.logger.call(msg.logger, msg.payload + '\n' + msg.stacktrace); + }); + } + consoleMessageBackup = []; +});