【问题标题】:adding variables together in expect statement在期望语句中添加变量
【发布时间】:2016-06-06 19:22:33
【问题描述】:

我有一些使用量角器/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 进行比较,这是 result1-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"}.

【问题讨论】:

    标签: angularjs jasmine protractor


    【解决方案1】:

    试图将 Promise 添加到一起,而不是实际解析的值

    在这种情况下,我会使用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 转换为“then”函数参数:

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

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

    【讨论】:

      【解决方案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]);  
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多