2016-08-12 10 views
5

Jak korzystać z asynchronicznych testów i czekam na testy kątomierza?Korzystanie z asynchronizacji i czekanie w testach kątomierza selenowego

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

wyjściowy o to

  • b
  • wartość

i 1 w czasie oczekiwać funkcja doAwait() { oczekiwać asyncAction() ; return asyncAction(); }

Lubię myśleć o tym jako podobny do

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

który działa, ale przede asynchroniczny doAwait nie. Wierzę, że dzieje się tak dlatego, że generator rozrywa ControlFlow selenu.

+0

Masz już to "Wierzę, że to dlatego, że generator rozrywa ControlFlow selenu." – nilesh

+0

Jestem ciekaw, jak to przetestowałeś. Moje IDE obsługuje tylko do ECMA 6 – nilesh

+0

wymagają ('babel-register') ({ wtyczki: ['transform-async-to-generator'] }); – TrevDev

Odpowiedz

4

Dodając to do konfiguracji kątomierz działa:

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

Choć może nie wszystkie obietnice mają być zarządzane obietnice?

Warto zauważyć, że inne rozwiązanie wymaga owijając każdą funkcję asynchronicznej:

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

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

async funkcje/await

async funkcje i kluczowe await są prawdopodobnie w najbliższych ES2017 (ES8) i dostępne przez kilka kompilatorów. W tej chwili często przerywają przepływ sterowania WebDriver. (GitHub issue). Nadal możesz z nich korzystać, ale jeśli to zrobisz, będziesz musiał używać await/Promises dla prawie wszystkich twoich synchronizacji. Zobacz przykłady spec/asyncAwaitAdapterSpec.ts i spec/asyncAwaitErrorSpec.ts.

Powiązane problemy