1

我正在为我的 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"]

等等。

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

有谁知道发生了什么?

[编辑]

我能够通过以下方式获得接近我想要的东西:

div.widgeta) 向我的 s添加一个新属性

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()考虑到应该能够处理这个问题,这似乎有点迂回,对吧?想法?

[/编辑]

4

0 回答 0