2016-08-12 17 views
5

Làm cách nào để sử dụng tính năng không đồng bộ và đang chờ kiểm tra thước đo góc?Sử dụng async và chờ trong các thử nghiệm thước đo selenium

it('test async', function(){ 
    var value = 0; 
    function asyncAction() { 
     return browser.driver.wait(()=>true) 
      .then(function() { 
       console.log('a'); 
       return value++; 
      }); 
    } 
    //-Problem Area- 
    async function doAwait(){ 
     await asyncAction(); 
     return asyncAction(); 
    } 

    doAwait(); 

    protractor.promise.controlFlow().execute(() => { 
     console.log('b'); 
     expect(value).toBe(2); 
    }); 
}); 

đầu ra ở đây là

  • một
  • b
  • một giá trị

và là 1 tại thời điểm mong đợi chức năng doAwait() { chờ asyncAction() ; trả về asyncAction(); }

Tôi thích nghĩ về điều này như tương tự như

function doAwait(){ 
    asyncAction().then(()=>asyncAction()); 
} 

Những công trình nhưng trên async doAwait không. Tôi tin rằng điều này là do máy phát điện phá vỡ ControlFlow của selen.

+0

Bạn đã có điều này "Tôi tin rằng điều này là do máy phát điện phá vỡ ControlFlow của selen." – nilesh

+0

Tôi rất tò mò muốn biết bạn đã thử nghiệm điều này như thế nào. IDE của tôi chỉ hỗ trợ cho đến khi ECMA 6 – nilesh

+0

yêu cầu ('babel-register') ({ plugin: ['transform-async-to-generator'] }); – TrevDev

Trả lời

4

Thêm này để cấu hình thước đo hoạt động:

var webdriver = require.main.require('selenium-webdriver'); 
Promise = webdriver.promise.Promise; 
Object.assign(Promise, webdriver.promise); 
Promise.resolve = Promise.fulfilled; 
Promise.reject = Promise.rejected; 

Mặc dù có thể không phải tất cả những lời hứa có nghĩa vụ phải được hứa hẹn được quản lý?

Cần lưu ý rằng các giải pháp khác đòi hỏi gói mỗi chức năng async:

protractor.promise.controlFlow().execute(async() => { 
    await asyncAction(); 
    return asyncAction(); 
}); 
0

Xem https://github.com/angular/jasminewd#async-functions--await:

async chức năng/await

async chức năng và await từ khóa có khả năng sắp tới trong ES2017 (ES8), và có sẵn thông qua một số trình biên dịch. Hiện tại, họ thường phá vỡ luồng điều khiển WebDriver. (GitHub issue). Bạn vẫn có thể sử dụng chúng, nhưng nếu bạn làm như vậy bạn sẽ phải sử dụng await/Hứa hẹn cho hầu như tất cả đồng bộ hóa của bạn. Xem các ví dụ spec/asyncAwaitAdapterSpec.tsspec/asyncAwaitErrorSpec.ts.

Các vấn đề liên quan