2016-08-12 8 views
5

分数器テストで非同期と待機を使用するにはどうすればよいですか?asyncとaleitを使用してセレンの分度器テストを行う

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

出力はここ

  • B

及び値は時1であり期待 関数doAwait(){ はasyncActionを待ちます() ; return asyncAction(); }

私は動作しますが、doAwait非同期上記にはない

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

と同様に、このと考えたいです。これは、ジェネレータがセレンのControlFlowを破るためです。分度器の設定にこれを追加する

+0

あなたはすでにこれを持っています。これは、ジェネレータがセレンのControlFlowを破るためです。 – nilesh

+0

私はあなたがこれをどのようにテストしたのか不思議です。私のIDEは、ECMA 6 – nilesh

+0

( 'babel-register')({ プラグイン:['transform-async-to-generator'] })が必要です。 – TrevDev

答えて

4

は動作します:

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

多分、すべての約束は約束を管理することになっているしていないが?

他のソリューションは、各非同期機能をラップする必要があることは注目に値する

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

https://github.com/angular/jasminewd#async-functions--awaitを参照してください:

async機能/ await

async機能とawaitキーワードは、おそらく(ES2017に来ていますES8)、いくつかのコンパイラで利用できます。現時点では、WebDriverの制御フローが壊れることがあります。 (GitHub issue)。あなたはまだそれらを使用することができますが、そうする場合はほとんどすべての同期のためにawait/Promisesを使用する必要があります。例としては、spec/asyncAwaitAdapterSpec.tsspec/asyncAwaitErrorSpec.tsを参照してください。

関連する問題