一尘不染

如何使用量角器在e2e测试中期望元素的动态计数

angularjs

我目前正在使用Protractor为不起眼的Angular应用编写一些e2e测试。

我的应用程序运行良好,单元测试通过了所有测试,也使用了e2e …直到这一项:

appE2ESpec.js

describe('adding an item', function() {
  var items,
      addItemButton,
      startCount;

  beforeEach(function() {
    items = element.all(by.css('li.item'));
    addItemButton = element(by.id('addItemButton'));
    startCount = items.count();
  });

  it('should display a new item in list', function() {
    addItemButton.click();

    expect(items.count()).toEqual(startCount+1);
  });
});

这就是我编写测试的方式,但是,

问题是: items.count()返回一个promise, 我知道 ,但是我无法迫使Protractor解决它。所以我得到这个:

Failures:

1) myApp adding an item should display a new item in list
  Message:
    Expected 6 to equal '[object Object]1'.

我尝试过的

items.count().then(function(count) {
  startCount = count;
  //console.log(startCount) --> "6" Perfect!
});

但得到的最终结果相同......我不能把expect进入的then,我想到了这一点。

  • 我搜索了Protractor GitHub存储库问题,StackOverflow和Google AngularJs组。

附录:

console.log(startCount) 输出此:

{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }

我可以写,.toEqual(6)但是我不想每次需要更改应用程序启动状态时都重写测试。

任何想法?提前致谢!!


阅读 229

收藏
2020-07-04

共1个答案

一尘不染

您需要先解决承诺,然后再进行断言。

量角器将解决您传递给Expect()的诺言,但不能在诺言中添加数字。您需要首先解决诺言的价值:

beforeEach(function() {
  ...
  items.count().then(function(originalCount) {
    startCount = originalCount;
  });
});

it('should display a new item in list', function() {
  ...
  expect(items.count()).toEqual(startCount+1);
});
2020-07-04