javascript - 强制 Protractor 的 onPrepare 等待异步 http 请求

标签 javascript angularjs node.js asynchronous protractor

我的 Protractor conf.js,onPrepare 函数需要发出一个 http 请求,如下所示,

onPrepare: function(done) {
    request.get('http://pepper/sysid')
      .end(function(err, resp){
        if(err || !resp.ok){
          log("there is an error " + err.message)
          done()
        }else{
          global.sysid = resp.sysid
          done()
         }
      })

它抛出错误,done 不是一个函数

有没有其他方法可以在我的测试开始执行之前强制调用 onPrepare 中的回调?

最佳答案

onPrepare() 可以 optionally return a promise该 Protractor 将在开始执行测试之前解析:

onPrepare can optionally return a promise, which Protractor will wait for before continuing execution. This can be used if the preparation involves any asynchronous calls, e.g. interacting with the browser. Otherwise Protractor cannot guarantee order of execution and may start the tests before preparation finishes.

做一个 Protractor promise并从onPrepare()返回它:

onPrepare: function() {
    var defer = protractor.promise.defer();

    request.get('http://pepper/sysid').end(function(err, resp) {
        if (err || !resp.ok) {
            log("there is an error " + err.message);
            defer.reject(resp);
        } else {
            global.sysid = resp.sysid;
            defer.fulfill(resp);
        }
    });

    return defer.promise;
},

关于javascript - 强制 Protractor 的 onPrepare 等待异步 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34482583/

相关文章:

javascript - 如何从 gulp-contains 回调中提取文件名?

Node.js 和 socket.io - 未握手的客户端应重新连接

javascript - 在 Web 控件中处理多个事件

javascript - 为什么我的 javascript 函数被打印为未定义?

javascript - 为什么在我将 "copied"更改为新对象后我的原始对象会受到影响?

angularjs - 在 html 属性中使用 angularjs 过滤器

android - $http 请求在已签名的 apk Ionic 中不起作用

javascript - Angular JS。我正在尝试使用复选框过滤简单的结果列表

javascript - 交替重复倒计时 - html - javascript

javascript - 无法在node.js脚本中发布数据