metaltest/index.js

61 lines
1.4 KiB
JavaScript
Raw Normal View History

2022-12-05 16:54:02 -05:00
import { nullreporter } from './reporter/nullreporter.js'
2022-11-08 22:29:58 -05:00
const metaltest = (title) => {
const suite = []
const only = []
const before = []
const after = []
let success = 0
let fail = 0
const testSuccess = []
const testFail = []
const runner = (name, fn) => {
suite.push({ name, fn })
}
runner.only = (name, fn) => { only.push({ name, fn }) }
2022-11-08 22:29:58 -05:00
runner.before = (fn) => { before.push(fn) }
runner.after = (fn) => { after.push(fn) }
runner.run = async (...reporters) => {
2022-12-05 16:54:02 -05:00
const rs = reporters.map(r => Object.assign({}, nullreporter, r))
2022-11-08 22:29:58 -05:00
rs.forEach(r => r.start(title))
rs.forEach(r => r.before())
const tests = only.length ? only : suite
for (const test of tests) {
try {
for (const fn of before) await fn()
await test.fn()
success++
rs.forEach(r => r.success(test))
}
catch (e) {
fail++
testFail.push(Object.assign({}, test, { error: e }))
rs.forEach(r => r.fail(test, e))
}
}
for (const fn of after) await fn()
rs.forEach(r => r.after())
const stats = { title, success, fail, total: success + fail, testSuccess, testFail }
rs.forEach(r => r.end(stats))
return stats
}
return runner
}
export * from './reporter/index.js'
export { runifmain } from './runifmain.js'
export { suite } from './suite.js'
export { metaltest }
2022-11-08 22:29:58 -05:00
export default metaltest