如何在量angular器中创build和操作承诺?

我想要使​​用Node Http模块直接调用我的服务器来设置我的量angular器testing。 Http是基于callback的,我想把它变成承诺。

例如,我想有这个函数返回诺言:

function callMyApi() { var promise = // somehow create promise; http.request({path: '/yada/yada', method: 'POST'}, function(resp) { promise.complete(resp); }); return promise; } 

所以,问题是:我需要什么require()来代替“以某种方式创造诺言”这个工作?

量angular器使用WebDriver的承诺,并公布全球范围内的“量angular器”API。 所以你应该可以做到

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

有关完整的WebDriverJS Promise API,请参阅https://code.google.com/p/selenium/source/browse/javascript/webdriver/promise.js上的代码

这是做到这一点的错误方法,但了解量angular器控制stream程可能会有所帮助。 如果你想要按照量angular器的顺序运行普通的Javascript,可以通过控制stream量来添加它。

在这种情况下,您可以使用自己的承诺库,然后只需使用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语句,或者做一个testing的一部分,或者甚至使用fs在testing中打印一些文件。

 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); });