AngularJS ng-repeat跟踪$ index和Protractor with Duplicates

时间:2017-10-06 15:31:07

标签: angularjs protractor angularjs-ng-repeat

我有一个字符串数组,我需要允许重复。

vm.list = ["item","item","item","item","item"]

这是在带有

的html中处理的
<ul class="listItems>
    <li ng-repeat="item in ctrl.list track by $index"></li>
</ul>

这显示在DOM中没有问题,但是当我尝试量角器测试ng-repeat时遇到问题,因为我无法对其进行单元测试。

所以我的测试就像是。

Then("List items should contain {int} items.", function(listLength){
    return element(by.css(".listItems").all(by.repeater('item in ctrl.list track by $index')).then(function(list){
        return expect(list.length).equal(listLength);
    });
});

我运行我的测试,它失败,Expect 0为5 但是,如果我将它们都制作成独一无二的,它可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我相信这对你有用:

Then("List items should contain {int} items.", function(listLength){
    let list = element(by.css(".listItems").all(by.repeater('item in ctrl.list'));
    expect(list.count()).toBe(listLength);
});

来源:http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.count

编辑:抱歉,我误解了您的问题,似乎track by无法处理数组中的重复值。见:https://docs.angularjs.org/api/ng/directive/ngRepeat。您可以替换自己的跟踪功能。

以下是类似问题的示例:https://stackoverflow.com/a/28232640/3111958

第二次编辑:再观察一下,量角器不会逐个使用轨道。我更新了代码块以反映这一点。看看这个问题:https://stackoverflow.com/a/37535098/3111958