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);
});