繁体   English   中英

如何让量角器等待触发的承诺解决?

[英]How do I make Protractor wait for a triggered promise to resolve?

所以我有一个网站,点击一个按钮,它发送到一个角度服务,它提出一个承诺,解决它,获取一些数据,并在页面上显示该数据。 我想要一个角度测试,找到按钮,点击它,并验证我得到了数据。 但是,测试总是在按钮结算之前完成。 我尝试了browser.sleep(),但这只是暂停了承诺从未解决的事情。 关于量角器的许多其他与承诺相关的问题没有帮助,因为承诺没有在测试中设置,而是由页面本身设置。

这是我的测试:

it('should roll a d2', function () {
    element(by.id('d2Button')).click();

    //whatever has to be here for the waiting to occur

    expect(element(by.binding('rolls.d2')).getText()).not.toEqual('0');
});

这是HTML:

<button id="d2Button" type="button" class="btn btn-success" ng-click="rollD2()">Roll</button>
<span><b>{{rolls.d2 | number}}</b></span>

以下是点击时调用的角度代码的简短摘要:

$scope.rollD2 = function () {
    diceService.getD2Roll($scope.quantities.d2).then(function (data) {
        $scope.rolls.d2 = data.roll;
    });
};

这是服务电话:

function getD2Roll(quantity) {
    var url = "Dice/D2/" + quantity;
    return getPromise(url);
}

function getPromise(url) {
    var deferred = $q.defer();
    $http.get(url).success(deferred.resolve).error(deferred.reject);
    return deferred.promise;
}

如何让测试正确等待?

这里的答案是在按钮单击后使用内置的browser.waitForAngular()功能。 我为所有使用的测试做了一个常见的方法,如下所示:

app.clickButtonAndWaitForResolution = function (button) {
    button.click();
    browser.waitForAngular();
};

然后,任何需要单击触发AJAX调用的按钮的测试都将调用此函数并传入要单击的按钮元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM