在循环中使用.then()时函数总是返回false .each()

时间:2015-08-09 12:02:37

标签: angularjs jasmine each protractor angular-promise

从Spec调用函数时,代码运行良好的' aria-label'已验证/已检查,但是true / false未返回到规格以检查.toBe(true)

页面对象:功能

checkOptionsEnabled: function(){
        var status = false;
        element.all(by.repeater('item in items')).then(function(options) {
             options.forEach(function(option) {
                    option.getAttribute("aria-label").then(function(ariaLabel) {
                    expect(ariaLabel).toContain('enabled');                
                });
            });
        });
        return status;
    },

规范:调用功能

page.journeyModes.checkAll.click();
expect(page.journeyModes.checkOptionsEnabled()).toBe(true);
page.journeyModes.uncheckAll.click();
expect(page.journeyModes.checkOptionsDisabled()).toBe(true);

错误

 1) TravelInfo As a user I can Select Journey Modes
  Message:
    Expected false to be true.
  Stacktrace:
    Error: Expected false to be true.
   at new jasmine.ExpectationResult

C:\用户\ sunil.sharma \文件\ PortalAutomatedTests \ node_modules \量角器\ n    de_modules \ minijasminenode \ lib中\茉莉1.3.1.js:137:32)     在[object Object]。

1 个答案:

答案 0 :(得分:1)

您需要的是reduce()

checkOptionsEnabled: function() {
    return element.all(by.repeater('item in items')).reduce(function(acc, elem) {
        return elem.getAttribute("aria-label").then(function (attr) {
            return acc && (attr.indexOf("enabled") >= 0);
        });        
    }, true);
},

这基本上是检查enabled属性中是否存在aria-label并累积结果布尔值。