【问题标题】:AngularJS ng-repeat track by $index and Protractor with DuplicatesAngularJS ng-repeat track by $index 和 Protractor with Duplicates
【发布时间】:2017-10-06 15:31:07
【问题描述】:

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

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 to be 5 但如果我让它们都独一无二,它工作正常,我该如何解决这个问题?

【问题讨论】:

    标签: angularjs protractor angularjs-ng-repeat


    【解决方案1】:

    我相信这对你有用:

    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

    【讨论】:

    • 但是 'track by $index' 应该处理文档示例中给出的重复项
      {{ n}}
      在 html 中呈现时有效,但由于某种原因在 Protractor 中失败。
    • 实际上看起来你不应该在转发器中包含track by $index,请查看编辑后的答案。
    • 是的,我也这么认为,但是不,那也没用 :(
    • 嗯,您是否尝试使用硬编码列表对其进行测试?也许列表没有在运行时填充,或者它没有及时加载到 DOM 中以供量角器检查。
    • 是的,它很奇怪,如果您正常查看 html,它可以找到,但是尝试在量角器中计算
    • 是失败的,就像量角器无法渲染ng-repeat 正确,如果我给它一个没有重复的列表,它工作正常。不过,我已经用这个工具打了很多砖墙,现在没有什么让我感到惊讶的了,它有点像一种黑暗艺术,有时会因为看起来没有充分理由而失败。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签