AngularJS e2e测试:如何获取repeater()的值。count()? 问题

AngularJS e2e测试:如何获取repeater()的值。count()? 问题,angularjs,karma-runner,end-to-end,Angularjs,Karma Runner,End To End,调用中继器('#myTable tr','Rows').count()返回一个未来,而不是整数。我需要获取整数值,以便确认是否向表中添加了其他行 代码 测试结果 深入研究Angularjs的e2e支持的源代码可以发现,您必须在Future上调用execute()。另外,当您调用execute时,必须为execute()提供一个“done”函数,否则TestCular将(奇怪的是!)跳过您的测试 代码 虽然我很高兴看到这一点,但我担心可能会出现一些异步错误,而且,我觉得这是一种黑客行为,不是正确的

调用
中继器('#myTable tr','Rows').count()
返回一个
未来
,而不是整数。我需要获取整数值,以便确认是否向表中添加了其他行

代码 测试结果
深入研究Angularjs的e2e支持的源代码可以发现,您必须在
Future
上调用
execute()。另外,当您调用
execute
时,必须为
execute()
提供一个“done”函数,否则TestCular将(奇怪的是!)跳过您的测试

代码
虽然我很高兴看到这一点,但我担心可能会出现一些异步错误,而且,我觉得这是一种黑客行为,不是正确的方法。有什么想法吗?

我遇到了同样的问题,在测试调用
execute()
后返回的
值时,我看到了令人困惑的结果。我发现这种方法更可靠:

var getCount = repeater('ul li').count();
getCount.execute(function(value) {
    expect(value).toEqual(3);
});

在定位器返回的异步承诺中,您可以最容易地做到这一点

element.all(By.repeater 'thing in things').then(function(elements){
      count = elements.length;
      expect(count).toEqual(3);
});

基于最新的量角器版本:

it('should add a new user when save button is clicked', function() {
    var memberCount;
    element.all(by.repeater('#memberTable tr','Member Rows')).count().then(function(value) {
        memberCount = value;
    });
    ...
    // then do all your entering user info, saving etc.
    ...
    browser.refresh(); // or however you want to load new data
    expect(element.all(by.repeater('#memberTable tr','Member Rows')).count()).toEqual(memberCount + 1);
});

我刚才也碰到了这个问题,你能详细说明一下你的解决方案吗?如果你能提供代码示例,那将非常有帮助!谢谢像上面第1行一样调用
count()
方法。它返回一个
Future
——当您调用
execute()
方法时,该对象将获取中继器的计数。传入一个空函数以满足它。调用
execute()
后,您可以通过访问
Future
value
属性来获取行数。我已经尝试过了,但随后出现了下一个错误:“帧窗口不可访问”。我重新访问了该属性,发现我也遇到了同样的错误。我想知道是否有一些更新改变了这种行为。我认为这是个未解之谜。这是一种让Angular很难掌握的东西,但同时又非常令人兴奋和强大。谢谢,大卫。我去看看。
var getCount = repeater('ul li').count();
getCount.execute(function(value) {
    expect(value).toEqual(3);
});
element.all(By.repeater 'thing in things').then(function(elements){
      count = elements.length;
      expect(count).toEqual(3);
});
it('should add a new user when save button is clicked', function() {
    var memberCount;
    element.all(by.repeater('#memberTable tr','Member Rows')).count().then(function(value) {
        memberCount = value;
    });
    ...
    // then do all your entering user info, saving etc.
    ...
    browser.refresh(); // or however you want to load new data
    expect(element.all(by.repeater('#memberTable tr','Member Rows')).count()).toEqual(memberCount + 1);
});