2014-12-22 11 views
7

Come posso ottenere la funzione, lo scenario e il passo correnti nel mondo?Cucumber JS Richiama la funzione/lo scenario/passaggio nel mondo

ho provato in questo modo ma ho solo il nome e la descrizione Scenario:

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

Grazie per il vostro aiuto.

+0

In questo codice è possibile vedere una funzione getLastStep https://github.com/cucumber/cucumber-js/blob/master/lib/cucumber /ast/scenario.js forse questo può aiutare –

risposta

5

Ok, quindi ho finalmente trovato questa soluzione: creare un oggetto Context chiamato in hook.

hooks.js di 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(); 
    }); 
}; 

L'oggetto context ha appena getter metodi/setter.

Ora è possibile accedere alla funzione/scenario/passaggio corrente nel codice.

Per la mia exemple, nel mondo:

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; 
     }; 
    }; 
}; 
0
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;