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

Javascript 如何使用量角器期望e2e测试中的元素动态计数,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我目前正在为我的带有量角器的简陋角度应用程序编写一些e2e测试 我的应用程序运行良好,单元测试全部通过,也使用了e2e。。。在此之前: appe2spec.js describe('adding an item', function() { var items, addItemButton, startCount; beforeEach(function() { items = element.all(by.css('li.item')); ad

我目前正在为我的带有量角器的简陋角度应用程序编写一些e2e测试

我的应用程序运行良好,单元测试全部通过,也使用了e2e。。。在此之前:

appe2spec.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()返回一个承诺,我知道,但我无法强迫量角器解决它。所以我得到这个:

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
,我也考虑过了

  • 我搜索了Digrator GitHub存储库问题、StackOverflow和Google AngularJs组
附录:

items.count().then(function(count) {
  startCount = count;
  //console.log(startCount) --> "6" Perfect!
});
console.log(startCount)
输出以下内容:

{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }
我本可以编写
.toEqual(6)
,但我不想每次需要更改应用程序启动状态时都重写测试


有什么想法吗?提前谢谢

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

量角器将解析传递给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);
});

当使用
chai
进行断言时,有一个
chai as promised
允许以更可读的方式处理承诺。要使其正常工作,您首先需要声明:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
然后在代码中:

// here is modified remaind of the code from the original question:
it('should display a new item in list', function() {
  addItemButton.click();

  expect(items.count()).should.eventually.equal(startCount+1);
});

你是我的英雄!谢谢;)希望这能帮助其他人从量角器开始:)我遇到了同样的问题。他们应该在量角器中创建一种方法来解决这些承诺。他们不应该强迫程序员使用expect()来解决承诺。总会有这样一种情况,您需要该值,而不需要使用expect()@glepretre。我也有同样的问题,但是。。上述解决方案不起作用。我得到了“期望3等于未定义的”。错误。@glepretre我也有这个问题,我得到了与Rahul相同的结果