一尘不染

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

angularjs

我的量角器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测试开始执行之前调用内部回调吗?


阅读 274

收藏
2020-07-04

共1个答案

一尘不染

onPrepare()可以选择返回量角器在开始执行测试之前将解决的承诺

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;
},
2020-07-04