如何期望使用Protractor进行e2e测试中的元素动态计数

gle*_*tre 18 javascript angularjs protractor

我正在为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);
  });
});
Run Code Online (Sandbox Code Playgroud)

这就是我写测试的方法,但是,

问题是: 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'.
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

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

但最后得到了相同的结果......我不能把它expect放进去then,我也想到了.

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

附录:

console.log(startCount) 输出:

{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?提前致谢!!

And*_*s D 25

您需要解决承诺,然后执行断言.

量角器将解析您传递给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);
});
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题.他们应该在量角器中创建一个方法来解决这些承诺.他们不应该强迫程序员使用expect()来解决一个承诺.总会有一种情况,你需要这个值,而不需要使用expect() (2认同)