2016-08-12 38 views
5

如何在量角器测试中使用异步并等待?这里在硒量角器测试中使用异步并等待

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

我喜欢把这个作为类似的到

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

哪些工作,但上述异步doAwait没有。我相信这是因为发生器打破了硒的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(); 
});