2014-09-22 9 views
4

테스트 용도로만 사용되는 expressjs 웹 서버를 정상적으로 종료하기 위해 사용하는 AfterFeatures 후크가 있습니다. 이 훅에서는 World에 추가 된 방문 메소드를 호출해야하지만, 분명히이 훅 내에서 World에 액세스 할 수는 없습니다. 이 속박과 다른 갈고리 속에서 세계의 것들에 접근하기 위해 무엇을 할 수 있습니까?AfterFeatures 후크의 월드 메서드에 액세스 할 수 없습니다.

// features/support/after_hooks.js 
var myAfterHooks = function() { 
    this.registerHandler('AfterFeatures', function (event, callback) { 
    this.visit('/quit', callback); 
    }); 
}; 
module.exports = myAfterHooks; 
+1

'BeforeFeatures'에서도 같은 동작을 보입니다. 서버와 같은 것들이'BeforeFeatures'에서 시작되고'AfterFeatures'에서 정리되는 것이 가장 이상합니다. 그러나 현재는 당신이 말하는 것처럼 세계는 잠시 동안 자신의 발행 보드에서 버그로 제기되어 하나의 이정표이지만, 언제 완료 될지 확신하지 못합니다. https://github.com/cucumber/cucumber-js/issues/165 – Grofit

답변

2

나는 그렇게 생각하지 않습니다. AfterFeatures에서 오이 프로세스는 이미 끝났으므로 은 더 이상 참조하지 않습니다.

하지만 페이지를 방문하기 만하면 오페라 밖에서 브라우저를 등록 할 수 있으므로 AfterFeatures 후크에서 계속 액세스 할 수 있습니다. AngularJS + 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; 

는 약간의 오해의 소지가 오이-JS GitHub의 저장소에

module.exports = function() { 

    this.World = function World(callback) { 

    this.visit = function(url) { 
     console.log('visit ' + url); 
     return browser.get(url); 
    }; 

    callback(); 
    }; 
} 

AfterFeatures 예를 world.js 당신을 이전에 세계에 등록되었습니다. 그러나 당신이 순수한 오이 j만을 사용하고 있다면, 나는 그 일을 보지 못했습니다.

그런데 registerHandler 대신에 이것을 사용할 수 있습니다.

this.AfterFeatures(function (event, callback) { 
    browser.get('/quit').then(callback); 
}); 

희망이 있습니다.