我正在为我的 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.widget
a) 向我的 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()
考虑到应该能够处理这个问题,这似乎有点迂回,对吧?想法?
[/编辑]