在期望语句

时间:2016-06-06 19:22:34

标签: angularjs jasmine protractor

我有一些字符串,我使用量角器/ jasmine / angularJS提取并转换为整数。我现在正在尝试将这些添加在一起并在期望声明中进行比较。但是我这样做会有一些承诺错误。

var result0 = element.all(by.binding('Inboxes.Inbox.Count')).first().getText().then(parseFloat);
    result0.then((value) => console.log("count: ", value));

    var result1 = element.all(by.binding('InboxItem.Count')).get(0).getText().then(parseFloat);
    result1.then((value) => console.log("count: ", value));

    var result2 = element.all(by.binding('InboxItem.Count')).get(1).getText().then(parseFloat);
    result2.then((value) => console.log("count: ", value));

    var result3 = element.all(by.binding('InboxItem.Count')).get(2).getText().then(parseFloat);
    result3.then((value) => console.log("count: ", value)).then(expect(result1 + result2 + result3).toEqual(result0));

    //compare badge counts to Inbox badge count
    expect(result1 + result2 + result3).toEqual(result0);
  });
 });
}); 

我收到以下承诺错误。我认为既然承诺已经满足并且下面的计数打印出来(41,7,14和20)我可以将底部3(reulst1-3)加在一起并与result0进行比较,结果是结果总数1-3 。我有这些承诺的时间,因为我是新手,并且不太了解它们。

Started
count:  41
count:  7
count:  14
count:  20
F

Failures:
1) Workflow Application When selecting Alerts panel should expand the Inbox panel and Postings
  Message:
  Expected 'ManagedPromise::859 {[[PromiseStatus]]:  "pending"}ManagedPromise::896 {[[PromiseStatus]]: "pending"}ManagedPromise::933 {[[PromiseStatus]]: "pending"}' to equal ManagedPromise::822 {[[PromiseStatus]]: "pending"}.

2 个答案:

答案 0 :(得分:4)

尝试将promises一起添加,而不是实际解析的值

在这种情况下,我会使用protractor.promise.all()来解决这个问题,以便立即解决实现预期所需的所有承诺:

protractor.promise.all([result0, result1, result2, result3]).then(function (values) {
    expect(values[1] + values[2] + values[3]).toEqual(values[0]);
});

而且,为了简化这一点,您可以spread() the resolved values进入"然后"函数参数:

protractor.promise.all([result0, result1, result2, result3]).then(spread(function (value0, value1, value2, value3) {
    expect(value1 + value2 + value3).toEqual(value0);
}));

请注意,与q不同,protractor.promise没有内置spread(),您必须拥有自定义的内容。

答案 1 :(得分:2)

我会使用.map来保持简单高效:

var total = element(by.binding('Inboxes.Inbox.Count'))
    .getText()
    .then(parseInt);

element.all(by.binding('InboxItem.Count'))        // get the elements
    .map((e, i) => e.getText().then(parseInt))    // parse each text
    .then((values) => {                           // assert the values 
        expect(total).toEqual(values[0] + values[1] + values[2]);  
    });