4

テストのみに使用されるexpressjs Webサーバーを正常にシャットダウンするために使用しているAfterFeaturesフックがあります。このフックでは、World に追加された visit メソッドを呼び出す必要がありますが、このフック内から World にアクセスできないようです。このフックや他のフック内のワールドにアクセスするにはどうすればよいですか?

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

1 に答える 1

2

私はあなたができるとは思わない。AfterFeatures では、cucumber プロセスは既に終了しているため、これはそれを参照しません。

ただし、ページにアクセスすることだけが必要な場合は、ブラウザーをキュウリの外部に登録して、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 に登録したドライバーにアクセスできるように見えるため、少し誤解を招く可能性があります。しかし、純粋な cucumber-js のみを使用している場合、私はその動作を見たことがありません。

ちなみに、registerHandler の代わりにこれだけでも使えます。

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

お役に立てれば。

于 2014-10-02T23:51:50.810 に答える