@academyjs/rover
Version:
Rover allows you to learn programming interactively.
57 lines • 1.64 kB
JavaScript
;
/**
* Provides a factory function for a {@link StatsCollector} object.
* @module
*/
Object.defineProperty(exports, "__esModule", { value: true });
const runner_1 = require("./runner");
const { EVENT_TEST_PASS, EVENT_TEST_FAIL, EVENT_SUITE_BEGIN, EVENT_RUN_BEGIN, EVENT_TEST_PENDING, EVENT_RUN_END, EVENT_TEST_END, } = runner_1.constants;
const { Date } = global;
/**
* Provides stats such as test duration, number of tests passed / failed etc., by listening for
* events emitted by `runner`.
*
* @param runner
* Runner instance
* @throws {TypeError} If falsy `runner`
*/
const createStatsCollector = (runner) => {
/**
* @type StatsCollector
*/
const stats = {
suites: 0,
tests: 0,
passes: 0,
pending: 0,
failures: 0,
};
if (!runner) {
throw new TypeError("Missing runner argument");
}
runner.stats = stats;
runner.once(EVENT_RUN_BEGIN, function () {
stats.start = new Date();
});
runner.on(EVENT_SUITE_BEGIN, function (suite) {
suite.root || stats.suites++;
});
runner.on(EVENT_TEST_PASS, function () {
stats.passes++;
});
runner.on(EVENT_TEST_FAIL, function () {
stats.failures++;
});
runner.on(EVENT_TEST_PENDING, function () {
stats.pending++;
});
runner.on(EVENT_TEST_END, function () {
stats.tests++;
});
runner.once(EVENT_RUN_END, function () {
stats.end = new Date();
stats.duration = stats.end - stats.start;
});
};
exports.default = createStatsCollector;
//# sourceMappingURL=stats-collector.js.map