【问题标题】:How to create and manipulate promises in Protractor?如何在 Protractor 中创建和操作 Promise?
【发布时间】:2014-01-30 01:55:48
【问题描述】:

我想使用 Node Http 模块直接调用我的服务器以设置我的量角器测试。 Http 是基于回调的,我想把它变成 Promise。

例如,我想让这个函数返回承诺:

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

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

  return promise;
}

所以,问题是:我需要什么require() 并代替“以某种方式创建承诺”才能使其工作?

【问题讨论】:

    标签: node.js angularjs protractor


    【解决方案1】:

    这是错误的做法,但了解 Protractor Control Flow 可能会有所帮助。如果您希望常规 Javascript 在 Protractor 中运行,请通过控制流添加它。

    在这种情况下,您可以根据需要使用自己的 Promise 库,然后只需使用 browser.wait 等待您的 Promise 完成。

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

    【讨论】:

      【解决方案2】:

      Protractor 使用 WebDriver 的 Promise 并在“protractor”上全局公开该 API。所以你应该可以做到

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

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

      【讨论】:

      • 谢谢!这有帮助。将其添加到github.com/angular/protractor/blob/master/docs/api.md 的 API 页面怎么样?
      • 我正在创建一个返回承诺的函数,我们如何在量角器中解析/拒绝?
      • 您可以使用deferred.fulfill(result)deferred.reject(reason) 解析/拒绝延迟对象
      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多