codeceptjs
Version:
Modern Era Acceptance Testing Framework for NodeJS
76 lines (63 loc) • 2.27 kB
JavaScript
const event = require('../event');
const container = require('../container');
const recorder = require('../recorder');
const store = require('../store');
const error = require('../output').error;
const { deepMerge } = require('../utils');
/**
* Enable Helpers to listen to test events
*/
module.exports = function () {
const helpers = container.helpers();
const runHelpersHook = (hook, param) => {
if (store.dryRun) return;
Object.keys(helpers).forEach((key) => {
helpers[key][hook](param);
});
};
const runAsyncHelpersHook = (hook, param, force) => {
if (store.dryRun) return;
Object.keys(helpers).forEach((key) => {
if (!helpers[key][hook]) return;
recorder.add(`hook ${key}.${hook}()`, () => helpers[key][hook](param), force);
});
};
event.dispatcher.on(event.suite.before, (suite) => {
// if (suite.parent) return; // only for root suite
runAsyncHelpersHook('_beforeSuite', suite, true);
});
event.dispatcher.on(event.suite.after, (suite) => {
// if (suite.parent) return; // only for root suite
runAsyncHelpersHook('_afterSuite', suite, true);
});
event.dispatcher.on(event.test.started, (test) => {
runHelpersHook('_test', test);
recorder.catch(e => error(e));
});
event.dispatcher.on(event.test.before, (test) => {
// schedule config to revert changes
runAsyncHelpersHook('_before', test, true);
});
event.dispatcher.on(event.test.passed, (test) => {
runAsyncHelpersHook('_passed', test, true);
// should not fail test execution, so errors should be caught
recorder.catchWithoutStop(e => error(e));
});
event.dispatcher.on(event.test.failed, (test) => {
runAsyncHelpersHook('_failed', test, true);
// should not fail test execution, so errors should be caught
recorder.catchWithoutStop(e => error(e));
});
event.dispatcher.on(event.test.after, () => {
runAsyncHelpersHook('_after', {}, true);
});
event.dispatcher.on(event.step.before, (step) => {
runAsyncHelpersHook('_beforeStep', step);
});
event.dispatcher.on(event.step.after, (step) => {
runAsyncHelpersHook('_afterStep', step);
});
event.dispatcher.on(event.all.result, () => {
runAsyncHelpersHook('_finishTest', {}, true);
});
};