So, I finally found this solution: create a Context object called in hooks.
hooks.js file:
var context = require(process.cwd() + '/src/e2e/support/context'); module.exports = function Hooks() { this.BeforeFeature(function (event, callback) { context.setCurrentFeature(event.getPayloadItem('feature')); callback(); }); this.BeforeScenario(function (event, callback) { context.setCurrentScenario(event.getPayloadItem('scenario')); callback(); }); this.BeforeStep(function (event, callback) { context.setCurrentStep(event.getPayloadItem('step')); callback(); }); };
The context object has only getter / setter methods.
Now you can access the current function / script / step in your code.
For my example, in World:
var context = require(process.cwd() + '/src/e2e/support/context'); module.exports = function () { this.World = function World(callback) { this.handleError = function (error, callback) { var _this = this; browser.takeScreenshot().then(function (imageData) { var formatFeature = helperString.slugify(context.getCurrentFeature().getName()); var formatScenario = helperString.slugify(context.getCurrentScenario().getName()); var token = formatFeature + '_' + formatScenario; var path = process.cwd() + '/logs/test/e2e/'; var pngStream = fs.createWriteStream(path + token + '_screenshot.png') ; pngStream.write(new Buffer(imageData, 'base64')); pngStream.end(); _this.delayCallback(function handleErrorCallback() { callback.fail(new Error(error)); }); }); return _this; }; }; };
rbaaboud
source share