强制量角器的 onPrepare 等待异步 http 请求

Posted

技术标签:

【中文标题】强制量角器的 onPrepare 等待异步 http 请求【英文标题】:Force protractor's onPrepare to wait for async http request 【发布时间】:2016-04-01 15:46:21 【问题描述】:

我的量角器 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 is not a function

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

【问题讨论】:

【参考方案1】:

onPrepare() 可以 optionally return a promise 量角器在开始执行测试之前解决:

onPrepare 可以选择返回一个承诺,量角器将等待 在继续执行之前。这可以使用,如果准备 涉及任何异步调用,例如与浏览器交互。 否则量角器不能保证执行顺序,可能会启动 准备完成前的测试。

制作一个量角器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;
,

【讨论】:

以上是关于强制量角器的 onPrepare 等待异步 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

强制量角器等待种子数据加载

量角器 - 等待异步完成

使用 appium 执行量角器脚本时等待异步脚本结果超时

量角器异步/等待 UnhandledPromiseRejectionWarning:未处理的承诺拒绝

量角器:失败:超时等待异步角度任务在11秒后完成

量角器同步与异步