Cucumber JS Get Current Function / Script / Step in the World

How can I get the current function, script and step in the world?

I tried this way, but I only have the name and description of the script:

module.exports = function () { /** * Before each scenario */ this.Before(function (scenario, callback) { console.log(scenario); callback(); }); }; 

Thank you for your help.

+7
javascript cucumber cucumberjs
source share
2 answers

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; }; }; }; 
+5
source share
 var driver = require('./world.js').getDriver(); var path = require("path"); var fs = require("fs"); var mkdirp = require('mkdirp'); var sanitize = require("sanitize-filename"); var myHooks = function () { this.Before(function (scenario) { this.driver.manage().window().maxsize(); }); this.After(function (scenario) { this.driver.takeScreenshot().then(function (data) { var now = new Date().toLocaleString().replace(/T/, ' ').replace(/:/g,'_'); var nowtime = now.split(" "); var screenshotPath = path.join(__dirname,'../../screenshots', 'normal',nowtime[0]); mkdirp(screenshotPath, function (err) { if (err) console.error(err); }); var base64Data = data.replace(/^data:image\/png;base64,/, ""); fs.writeFile(path.join(screenshotPath, nowtime[1] + sanitize(scenario.getName() + ".png").replace(/ /g, "_")), base64Data, 'base64', function (err) { if (err) console.log(err); }); }); if (scenario.isFailed()) { this.driver.takeScreenshot().then(function (data) { var decodedImage = new Buffer(data, 'base64').toString('binary'); scenario.attach(decodedImage, 'image/png'); }); } return this.driver.manage().deleteAllCookies(); }); this.registerHandler('AfterFeatures', function (event) { return driver.quit(); }); }; module.exports = myHooks; 
0
source share

All Articles