basictap
Version:
Light tap adherent test runner
75 lines (53 loc) • 1.65 kB
JavaScript
import EventEmitter from 'events';
import createTestSuite from 'just-tap';
const { test, run, context } = createTestSuite();
const events = new EventEmitter();
let triggered = false;
function validateTest (name, job) {
if (!name) {
throw new Error('basictap: test was not given a name');
}
if (context.tests[name]) {
throw new Error('basictap: test already exists with name "' + name + '"');
}
if (!job) {
throw new Error(`basictap: test "${name}" was not given a function to run`);
}
}
function createTest (name, job) {
validateTest(name, job);
test(name, job);
}
createTest.skip = function (name, job) {
validateTest(name, job);
test.skip(name, job);
};
createTest.todo = function (name, job) {
if (job) {
throw new Error(`basictap: test "${name}" had a job, but was set as todo. Did you mean to skip?`);
}
test.todo(name, job);
};
createTest.only = function (name, job) {
validateTest(name, job);
test.only(name, job);
};
createTest.maximumConcurrentTests = 1;
createTest.trigger = async function triggerTests () {
if (triggered) {
return;
}
triggered = true;
const results = await run({ concurrency: createTest.maximumConcurrentTests });
if (!results.success) {
process.exit(1);
}
events.emit('finish', results);
};
createTest.on = events.addListener.bind(events);
createTest.off = events.removeListener.bind(events);
createTest.addListener = events.addListener.bind(events);
createTest.removeListener = events.removeListener.bind(events);
process.on('beforeExit', createTest.trigger);
createTest.maximumConcurrentTests = 1;
export default createTest;