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