我有一个AfterFeatures钩子,我试图优雅地关闭一个仅用于测试的expressjs Web服务器。在这个钩子中,我需要调用已添加到World的访问方法,但我显然无法从此钩子中访问World。我可以做些什么来在这个和其他钩子里获取World中的东西?
// features/support/after_hooks.js
var myAfterHooks = function () {
this.registerHandler('AfterFeatures', function (event, callback) {
this.visit('/quit', callback);
});
};
module.exports = myAfterHooks;
答案 0 :(得分:2)
我认为你不能。在AfterFeatures中黄瓜过程已经完成,所以这个不再引用它。
但是,如果你想要的只是访问一个页面,你可以在黄瓜外注册你的浏览器,以便仍然可以从AfterFeatures钩子访问它。如果您使用的是AngularJS + Protractor,Protractor会为您处理浏览器,因此仍可在AfterFeatures钩子中访问它。这将是同样的原则。这可以通过以下方式完成。
hooks.js
var myHooks = function () {
this.registerHandler('AfterFeatures', function (event, callback) {
console.log('----- AfterFeatures hook');
// This will not work as the World is no longer valid after the features
// outside cucumber
//this.visit('/quit', callback);
// But the browser is now handled by Protractor so you can do this
browser.get('/quit').then(callback);
});
};
module.exports = myHooks;
world.js
module.exports = function() {
this.World = function World(callback) {
this.visit = function(url) {
console.log('visit ' + url);
return browser.get(url);
};
callback();
};
}
cucumber-js GitHub存储库中的AfterFeatures示例有点误导,因为看起来您可以访问之前在World中注册的驱动程序。但是,如果你只使用纯黄瓜-js,我还没有看到那项工作。
顺便说一下,你可以使用这个而不是registerHandler。
this.AfterFeatures(function (event, callback) {
browser.get('/quit').then(callback);
});
希望这有帮助。