Published
Edited
Jul 13, 2018
1 star
Insert cell
Insert cell
Insert cell
testBasics
Insert cell
function testTable(tests, options = {}) {
const display = options.display || (v => `\`${v}\``)
const compare = options.compare || ((a, b) => ( a === b ))
const outputHeader = options.outputHeader || 'output'
const results = tests.map(({input, expected, output}) => {
let error = false
let passed = false
let result
let resultMd
let statusMd
let inputMd = input === null ? '<span style="color: gray">null</span>' :
(input === undefined ? '<span style="color: gray">undefined</span>' : display(input))
try {
result = output(input)
passed = compare(expected, result)
resultMd = display(result) +
(passed ? '' : `, <span style="color: gray">expected:</span> ${display(expected)}`)
statusMd = passed ? '<span style="color: green">pass</span>' : '<span style="color: red">fail</span>'
} catch (err) {
error = err
resultMd = statusMd = '<span style="color: #808000">error</span>'
}
let md = [inputMd, resultMd, statusMd].join('|') + "\n"
return {
input,
expected,
output: result,
passed,
error,
md
}
})
const el = md`input|${outputHeader}|status
-|-|-|-
${results.map(r => r.md)}`
let counts = {
pass: results.filter(r => r.passed).length,
fail: results.filter(r => !r.passed && !r.error).length,
error: results.filter(r => r.error).length
}
el.value = {
counts,
results,
passed: counts.fail + counts.error === 0,
error: counts.error > 0
}
return el
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more