From 3bd8d4ba513931e53442de67ab93c771229253b1 Mon Sep 17 00:00:00 2001 From: Jonatan Nilsson Date: Wed, 2 Jun 2021 21:28:51 +0000 Subject: [PATCH] Make eltro slightly more robust Make the printError slightly more robust as well as well as make it print better when obscure errors occur when programmers fiddle with the internal mechanics of node, for example the Error.prepareStack among other things. --- cli.mjs | 3 +++ lib/cli.mjs | 2 +- package.json | 2 +- test/failure.test.mjs | 23 +++++++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cli.mjs b/cli.mjs index a82992b..6b1bca4 100644 --- a/cli.mjs +++ b/cli.mjs @@ -62,4 +62,7 @@ cli.processTargets().then(function() { }) .then(function() { process.exit(0) +}, function(err) { + console.error('\x1b[31mInternal error occured:\x1b[0m', err) + process.exit(2) }) diff --git a/lib/cli.mjs b/lib/cli.mjs index cb94113..ab57dca 100644 --- a/lib/cli.mjs +++ b/lib/cli.mjs @@ -173,6 +173,6 @@ export function printError(err, msg) { console.error('\x1b[31m ' + before + err.toString() + '\x1b[0m\n \x1b[90m' - + err.stack.replace(err.toString(), '')) + + (err.stack || '').replace(err.toString(), '')) console.error('\x1b[0m') } diff --git a/package.json b/package.json index 1f23dd7..3bf6568 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eltro", - "version": "1.0.1", + "version": "1.0.2", "description": "Eltro is a tiny no-dependancy test framework for node", "main": "index.mjs", "scripts": { diff --git a/test/failure.test.mjs b/test/failure.test.mjs index 64ca8af..2a9fadf 100644 --- a/test/failure.test.mjs +++ b/test/failure.test.mjs @@ -26,3 +26,26 @@ e.test('Eltro should support any value in promise fail', async function() { assert.ok(t.failedTests[x].error.stack) } }) + +e.test('Eltro should support any value in throws', async function() { + const t = CreateT() + t.begin() + t.describe('', function() { + t.test('a', function() { throw null }) + t.test('b', function() { throw {} }) + t.test('c', function() { throw { message: 'test' } }) + t.test('d', function() { throw 1234 }) + t.test('e', async function() { throw null }) + t.test('f', async function() { throw {} }) + t.test('g', async function() { throw { message: 'test' } }) + t.test('h', async function() { throw 1234 }) + }) + await t.run() + assert.strictEqual(t.failedTests.length, 8) + + for (let x = 0; x < t.failedTests.length; x++) { + assert.strictEqual(typeof(t.failedTests[x].error), 'object') + assert.ok(t.failedTests[x].error.message) + assert.ok(t.failedTests[x].error.stack) + } +})