Fix Eltro handling of error messages so they always become normalized as Error objects
This commit is contained in:
parent
7c4829c36b
commit
970c76fd10
3 changed files with 41 additions and 2 deletions
|
@ -189,7 +189,18 @@ Eltro.prototype.__runTest = async function(stats, test) {
|
|||
.then(function() {
|
||||
stats.passed++
|
||||
}, 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++
|
||||
}
|
||||
)
|
||||
|
|
|
@ -241,7 +241,7 @@ t.describe('CLI', function() {
|
|||
cli: true
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
t.test('#fileMatches() should support filename matching with glob pattern', async function() {
|
||||
|
|
28
test/failure.test.mjs
Normal file
28
test/failure.test.mjs
Normal 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)
|
||||
}
|
||||
})
|
Loading…
Reference in a new issue