Node Httpモジュールを使用して、Protractorテストをセットアップするためにサーバーを直接呼び出します。Httpはコールバックベースであり、Promiseに変換したいです。
たとえば、この関数にpromiseを返させたいです:
_function callMyApi() {
var promise = // somehow create promise;
http.request({path: '/yada/yada', method: 'POST'}, function(resp) {
promise.complete(resp);
});
return promise;
}
_
それで、問題は、require()
に何が必要で、これが機能するために「なんらかの形で約束を作成する」の代わりに置く必要があるということです。
分度器はWebDriverの約束を使用し、そのAPIを「分度器」でグローバルに公開します。だからあなたはできるはずです
var deferred = protractor.promise.defer();
return deferred.promise;
完全なWebDriverJS Promise APIについては、 https://code.google.com/p/Selenium/source/browse/javascript/webdriver/promise.js のコードを参照してください。
これはこれを行うための間違った方法ですが、分度器制御フローについて知ることは助けになります。通常のJavascriptを分度器の順序で実行する場合は、制御フローを介して追加します。
この場合、必要に応じて独自のpromiseライブラリを使用し、browser.wait
約束が完了するのを待ちます。
var Promise = require('bluebird');
var promises = [];
browser.controlFlow().execute(function() {
var p = new Promise...
promises.Push(p);
});
browser.wait( function(){ return Promise.all(promises); }, timeoutMs );
これは通常の約束ではなく、console.log
ステートメントまたはテストの一部のタイミングを実行します。またはfs
を使用してテスト内の何かをファイルに出力します。
var startTime, duration;
browser.controlFlow().execute(function() {
startTime = new Date().getTime();
});
//Protractor code you want timed
browser.controlFlow().execute(function() {
duration = new Date().getTime() - startTime;
console.log("Duration:", duration);
});