codeceptjs
Version:
Modern Era Acceptance Testing Framework for NodeJS
46 lines (42 loc) • 1.47 kB
JavaScript
const event = require('../event');
const container = require('../container');
const recorder = require('../recorder');
const { deepMerge, deepClone, ucfirst } = require('../utils');
const { debug } = require('../output');
/**
* Enable Helpers to listen to test events
*/
module.exports = function () {
const helpers = container.helpers();
enableDynamicConfigFor('suite');
enableDynamicConfigFor('test');
function enableDynamicConfigFor(type) {
event.dispatcher.on(event[type].before, (context = {}) => {
function updateHelperConfig(helper, config) {
const oldConfig = Object.assign({}, helper.options);
try {
helper._setConfig(deepMerge(deepClone(oldConfig), config));
debug(`[${ucfirst(type)} Config] ${helper.constructor.name} ${JSON.stringify(config)}`);
} catch (err) {
recorder.throw(err);
return;
}
event.dispatcher.once(event[type].after, (t) => {
helper._setConfig(oldConfig);
debug(`[${ucfirst(type)} Config] Reverted for ${helper.constructor.name}`);
});
}
// change config
if (context.config) {
for (let name in context.config) {
const config = context.config[name];
if (name === '0') { // first helper
name = Object.keys(helpers)[0];
}
const helper = helpers[name];
updateHelperConfig(helper, config);
}
}
});
}
};