2014-12-22 5 views
7

mevcut Özellik/Senaryo/Adım alın? Salatalık JS i Dünyada cari Özelliği Senaryoyu ve Adım nasıl alabilirim Dünya

bu yolu denedim ama sadece Senaryo adı ve açıklaması vardır: Yardımlarınız için

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

teşekkürler.

+0

getLastStep https://github.com/cucumber/cucumber-js/blob/master/lib/cucumber /ast/scenario.js belki bu yardımcı olabilir –

cevap

5

Tamam, Ben nihayet bu çözüm buldu: kanca denilen bir Bağlam nesne oluşturmak.

hooks.js dosyası:

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(); 
    }); 
}; 

context nesne sadece/setter yöntemleri getter gelmiştir.

Artık kod anywere geçerli özellik/senaryo/adımını erişebilirler. Dünyada benim Exemple için

: Eğer bir işlev görebilir Bu kodda

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; 
İlgili konular