2015-12-27 7 views
6

Moje kątomierz conf.js, onPrepare funkcja wymaga, aby żądania HTTP, który wygląda,Siła kątomierza onPrepare czekać na zamówienie asynchroniczny 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() 
     } 
     }) 

To wyrzuca błąd jako, done is not a function

Czy istnieje w inny sposób, że mogę wymusić wywołania zwrotnego wewnątrz onPrepare do wywołania przed rozpoczęciem testów?

Odpowiedz

8

onPrepare() może optionally return a promise że kątomierz by rozwiązać przed rozpoczęciem wykonywania badań:

onPrepare mogą ewentualnie powrócić obietnicę, która będzie czekać kątomierz do wykonania przed kontynuowaniem. Można tego użyć, jeśli przygotowanie obejmuje połączenia asynchroniczne, np. interakcja z przeglądarką. W przeciwnym razie kątomierz nie może zagwarantować kolejności wykonania i może rozpocząć testy przed zakończeniem przygotowania.

Zrób kątomierz promise i odesłać go z 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; 
},