简体   繁体   English

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

[英]Force protractor's onPrepare to wait for async http request

My protractor conf.js, onPrepare function needs to make a http request that looks like, 我的量角器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()
         }
      })

It throws error as, done is not a function 它抛出错误, done is not a function

Is there any other way, that i can force the callback inside onPrepare to be invoked before my tests start execution? 还有其他方法,我可以在我的测试开始执行之前强制调用onPrepare的回调吗?

onPrepare() can optionally return a promise that protractor would resolve before starting to execute the tests: onPrepare()可以选择返回量角器在开始执行测试之前解析的promise

onPrepare can optionally return a promise, which Protractor will wait for before continuing execution. onPrepare可以选择返回一个promise,Protractor会在继续执行之前等待。 This can be used if the preparation involves any asynchronous calls, eg interacting with the browser. 如果准备涉及任何异步调用,例如与浏览器交互,则可以使用此方法。 Otherwise Protractor cannot guarantee order of execution and may start the tests before preparation finishes. 否则,量角器无法保证执行顺序,可能会在准备完成之前开始测试。

Make a protractor promise and return it from 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;
},

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM