How to create and manipulate promises in Protractor?

Konrad Garus picture Konrad Garus · Jan 10, 2014 · Viewed 21.8k times · Source

I want to use the Node Http module to call my server directly in order to set up my Protractor tests. Http is callback based and I want to turn that into promises.

For example, I want to have this function return promise:

function callMyApi() {
  var promise = // somehow create promise;

  http.request({path: '/yada/yada', method: 'POST'}, function(resp) {
    promise.complete(resp);
  });

  return promise;
}

So, the question is: what do I need to require() and put in place of "somehow create promise" for this to work?

Answer

Jmr picture Jmr · Jan 10, 2014

Protractor uses WebDriver's promises and exposes that API globally on 'protractor'. So you should be able to do

var deferred = protractor.promise.defer();
return deferred.promise;

For the full WebDriverJS Promise API, see the code at https://code.google.com/p/selenium/source/browse/javascript/webdriver/promise.js