@kronoslive/codeceptjs
Version:
Supercharged End 2 End Testing Framework for NodeJS
72 lines (60 loc) • 1.8 kB
JavaScript
let addMochawesomeContext;
let currentTest;
let currentSuite;
const Helper = require('../helper');
const { clearString } = require('../utils');
class Mochawesome extends Helper {
constructor(config) {
super(config);
// set defaults
this.options = {
uniqueScreenshotNames: false,
disableScreenshots: false,
};
addMochawesomeContext = require('mochawesome/addContext');
this._createConfig(config);
}
_createConfig(config) {
// override defaults with config
Object.assign(this.options, config);
}
_beforeSuite(suite) {
currentSuite = suite;
currentTest = '';
}
_before() {
if (currentSuite && currentSuite.ctx) {
currentTest = { test: currentSuite.ctx.currentTest };
}
}
_test(test) {
currentTest = { test };
}
_failed(test) {
if (this.options.disableScreenshots) return;
let fileName;
// Get proper name if we are fail on hook
if (test.ctx.test.type === 'hook') {
currentTest = { test: test.ctx.test };
// ignore retries if we are in hook
test._retries = -1;
fileName = clearString(`${test.title}_${currentTest.test.title}`);
} else {
currentTest = { test };
fileName = clearString(test.title);
}
if (this.options.uniqueScreenshotNames) {
const uuid = test.uuid || test.ctx.test.uuid;
fileName = `${fileName.substring(0, 10)}_${uuid}`;
}
if (test._retries < 1 || test._retries === test.retryNum) {
fileName = `${fileName}.failed.png`;
return addMochawesomeContext(currentTest, fileName);
}
}
addMochawesomeContext(context) {
if (currentTest === '') currentTest = { test: currentSuite.ctx.test };
return addMochawesomeContext(currentTest, context);
}
}
module.exports = Mochawesome;