量角器等待期望检查中使用的异步函数

时间:2014-12-17 18:31:17

标签: node.js asynchronous protractor

平,

我正在使用量角器来运行e2e测试,并希望有类似的东西:

expect(element(by.model('someModel')).getText()).toContain(asyncMethodResult());

我想避免这样做:

asyncMethodResult().then(function(result){
    expect(element(by.model('someModel').getText()).toContain(result);
});

也可能在beforeEach中运行异步请求,该请求也会“阻止”进一步执行,直到完成

可行吗?是https://www.npmjs.com/package/wait.for这样做的唯一方法吗?

[更新]为了回答:

it('test spec', function () {
   var expectFn = function (x, t) {
      var deferred = Q.defer();
      setTimeout(function () {
        console.log('Timeout complete:', x, t);
        deferred.resolve(x);
      }, t);
      return deferred.promise;
   };
   expect(expectFn(3, 1000)).toEqual(expectFn(4, 2000));
}

在以下情况下正确传递或失败(取决于x值):

browser.manage().timeouts().implicitlyWait(Y); //where Y > promise timeout value

在这种情况下,量角器等待'Y'毫秒,然后比较值,否则比较总是通过。

如果implicitWait小于超时,那么它总是会立即传递

1 个答案:

答案 0 :(得分:3)

您的第一个案例(expect(...).toContain(asyncMethodResult())应该已经有效。请参阅示例测试here

也可以在beforeEach块中运行异步请求。这是一个例子:

beforeEach(function(done) {
    doSyncStuff();
    doAsyncStuff.then(done);
});