Заставить onprepare транспортира ждать асинхронного http-запроса

мой транспортир 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() can дополнительно возвращает обещание этот транспортир разрешит перед началом выполнения тестов:

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