2015-12-27 20 views
6

conf.js thước đo của tôi, onPrepare chức năng cần phải thực hiện một yêu cầu http trông giống như,Force thước đo của onPrepare chờ yêu cầu async 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() 
     } 
     }) 

Nó ném lỗi như, done is not a function

Có cách khác, rằng tôi có thể buộc gọi lại bên trong onPrepare để được gọi trước khi thử nghiệm của tôi bắt đầu thực hiện?

Trả lời

8

onPrepare() thể optionally return a promise thước đo đó sẽ giải quyết trước khi bắt đầu thực hiện các bài kiểm tra:

onPrepare có thể tùy chọn trả về một lời hứa, mà thước đo sẽ đợi cho trước khi tiếp tục thực hiện. Điều này có thể được sử dụng nếu việc chuẩn bị liên quan đến bất kỳ cuộc gọi không đồng bộ nào, ví dụ: tương tác với trình duyệt. Nếu không Thước đo không thể đảm bảo trật tự thực thi và có thể bắt đầu các bài kiểm tra trước khi chuẩn bị kết thúc.

Thực hiện một thước đo promise và gửi lại từ 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; 
}, 
Các vấn đề liên quan