mixed-tape
Version:
Run tape tests concurrently
45 lines (43 loc) • 1.31 kB
JavaScript
const { PassThrough } = require('stream')
const { createTestStream } = require('./pipeline')
module.exports = {
api: (state, tape, report) => {
const testConcurrent = (...args) => {
state.registerTest()
process.nextTick(() => {
if (!state.only) {
const harness = tape.createHarness()
const { testReport, testEnded } = createTestStream(harness)
state.testsEnded.push(testEnded)
report.setMaxListeners(report.getMaxListeners() + 1)
testReport.pipe(report)
harness(...args)
}
})
}
testConcurrent.onFinish = fn => {
state.runOnFinish.push(fn)
}
testConcurrent.onFailure = fn => {
state.runOnFailure.push(fn)
}
testConcurrent.only = (...args) => {
state.registerTest()
state.only = true
const harness = tape.createHarness()
const { testReport, testEnded } = createTestStream(harness)
state.testsEnded.push(testEnded)
testReport.pipe(report)
harness(...args)
}
testConcurrent.skip = tape.skip
testConcurrent.createStream = () => {
state.pipedToProcess = false
report.unpipe(process.stdout)
const stream = PassThrough()
report.pipe(stream)
return stream
}
return testConcurrent
}
}