E2E测试 - 中继器()。列()提供不一致的结果

时间:2013-08-30 01:39:02

标签: testing angularjs angularjs-e2e

我正在为我的Angular应用程序编写一些E2E测试。我想做的一件事是确保将一组小部件加载到仪表板视图中,并在初始化应用程序时按正确的顺序放置。

JSON数组提供了五个模拟小部件。此数组中的每个小部件字典都有一个seq成员,我在其上订购数据。

我的模板如下:

<section id="dashboardApp" ng-cloak>
  <div class="widget" ng-repeat="widget in widgets | orderBy: 'seq'">
    <h3 ng-bind="widget.title"></h3>
    <div widget-view="widget"></div>
  </div>
</section>

(模板的小部件特定部分由widget.type指令中基于widgetView动态加载的部分定义,但对于此测试的范围来说太低了。)

我的E2E场景如下:

it('should load mock widgets into correct order, by seq', function () {
  expect(repeater('div.widget', 'widgets').column('widget.seq'))
    .toEqual(['1','2','3','4','5']);
});

并基于官方Angular教程中的示例。

但是,它与我预期结果的比较值是一个只有两个成员的数组。如果我更改我在.column()中检查的属性,我会得到测试运行器报告的不同长度的数组。例如,

.column('widget.seq')产生: ["3","4"]

.column('widget.type')产生: ["chart","chart","simpleTable"]

.column('widget.title')产生: ["Site Overview","Order Alerts","widget1","widget3","widget2"]

等等。

我发现这种变化很奇怪且不可预测。为了记录,报告的那些成员DO以正确的顺序显示,但结果只是部分,除非我查看widget.title ...

有谁知道发生了什么事?

[编辑]

我能够得到一些接近我想要的东西:

a)向我的div.widget添加新属性

b)编写自定义查询

像这样:

it('should load mock widgets into correct order, by seq', function () {
  var promise = element('div.widget').query(function (elements, done) {
    var seq = [];
    elements.each(function () {
      seq.push(parseInt(angular.element(this).attr('data-seq')));
    });
    done(null, seq);
  });
  expect(promise).toEqual([1,2,3,4,5]);
});

这可行但需要在我的应用程序代码中包含一些额外的垃圾(data-seq attr)。鉴于expect().column()应该能够处理这个问题,似乎有点迂回,对吧?想法?

[/编辑]

0 个答案:

没有答案