Fix Eltro handling of error messages so they always become normalized as Error objects

This commit is contained in:
Jonatan Nilsson 2021-06-02 15:30:45 +00:00
parent 7c4829c36b
commit 970c76fd10
3 changed files with 41 additions and 2 deletions

View file

@ -189,7 +189,18 @@ Eltro.prototype.__runTest = async function(stats, test) {
.then(function() { .then(function() {
stats.passed++ stats.passed++
}, function(err) { }, function(err) {
test.error = err let saveError = err
if (!saveError) {
saveError = new Error('Test promise rejected with empty message')
} else if (typeof(saveError) !== 'object' || saveError.message == null || saveError.stack == null) {
try {
saveError = new Error('Test promise rejected with ' + JSON.stringify(saveError))
} catch (parseError) {
saveError = new Error('Test promise rejected with ' + saveError + ' (Error stringifying: ' + parseError.message + ')')
}
saveError.originalError = err
}
test.error = saveError
stats.failed++ stats.failed++
} }
) )

28
test/failure.test.mjs Normal file
View file

@ -0,0 +1,28 @@
import e from '../lib/eltro.mjs'
import assert from '../lib/assert.mjs'
function CreateT() {
const t = new e.Eltro()
t.reporter = ''
return t
}
e.test('Eltro should support any value in promise fail', async function() {
const t = CreateT()
t.begin()
t.describe('', function() {
t.test('a', function() { return new Promise(function(res, rej) { rej() }) })
t.test('b', function() { return new Promise(function(res, rej) { rej(null) }) })
t.test('c', function() { return new Promise(function(res, rej) { rej(undefined) }) })
t.test('d', function() { return new Promise(function(res, rej) { rej(124523) }) })
t.test('e', function() { return new Promise(function(res, rej) { rej('testety') }) })
})
await t.run()
assert.strictEqual(t.failedTests.length, 5)
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)
}
})