mocha-it-each
Version:
Parameterized tests for Mocha
69 lines (68 loc) • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.itEach = void 0;
const itEach = (title, data, callback, callbackMocha) => {
if (callback.length === 2) {
callItAsync(title, data, callback, callbackMocha || it);
}
else {
callItSync(title, data, callback, callbackMocha || it);
}
};
exports.itEach = itEach;
itEach.only = (title, data, callback) => {
itEach(title, data, callback, it.only);
};
itEach.skip = (title, data, callback) => {
itEach(title, data, callback, it.skip);
};
/**
* Call mocha it function synchronously
*
* @template T type of parameters
* @param {string} title title of the test
* @param {T[]} data parameters
* @param {FunctionCallback} callback function to test
* @param {MochaCallback} callbackMocha mocha function to call
* @returns {Void} void
*/
function callItSync(title, data, callback, callbackMocha) {
data.forEach(function (val) {
callbackMocha(renderTemplate(title, val), function () {
return callback(val);
});
});
}
/**
* Call mocha it function asynchronously
*
* @template T type of parameters
* @param {string} title title of the test
* @param {T[]} data parameters
* @param {FunctionCallback} callback function to test
* @param {MochaCallback} callbackMocha mocha function to call
* @returns {Void} void
*/
function callItAsync(title, data, callback, callbackMocha) {
data.forEach(function (val) {
callbackMocha(renderTemplate(title, val), function (done) {
callback(done, val);
});
});
}
/**
* Add value to description
*
* @param {string} template title template
* @param {any} value value from parameter
* @returns {string} title
*/
function renderTemplate(template, value) {
try {
// ${value} is used with the value argument
return eval('`' + template + '`;');
}
catch (err) {
return template;
}
}